@@ -78,7 +78,7 @@ import {
7878const Tag = createClassDecorator <string >();
7979const Route = createMethodDecorator <string >();
8080const Column = createPropertyDecorator <string >();
81- const Inject = createParameterDecorator <string >();
81+ const Param = createParameterDecorator <string >();
8282```
8383
8484### Compose Functions
@@ -124,6 +124,34 @@ for (const col of columns) {
124124// age [{ type: "int", nullable: true }]
125125```
126126
127+ ### Property Injection
128+
129+ Property decorators can mark fields for dependency injection:
130+
131+ ``` typescript
132+ import { createPropertyDecorator } from " @zendrex/annotate" ;
133+
134+ const Inject = createPropertyDecorator <string >();
135+
136+ class UserService {
137+ @Inject (" database" )
138+ db! : Database ;
139+
140+ @Inject (" logger" )
141+ logger! : Logger ;
142+ }
143+
144+ // Reflect and resolve
145+ const deps = Inject .properties (UserService );
146+ // => [{ kind: "property", name: "db", metadata: ["database"] },
147+ // { kind: "property", name: "logger", metadata: ["logger"] }]
148+
149+ const instance = new UserService ();
150+ for (const dep of deps ) {
151+ (instance as any )[dep .name ] = container .get (dep .metadata [0 ]);
152+ }
153+ ```
154+
127155### General Reflection
128156
129157Use ` reflect() ` when you need to query multiple decorator types on a single class:
@@ -136,7 +164,7 @@ const reflector = reflect(UserController);
136164// Query by decorator key
137165const routes = reflector .methods (Route .key );
138166const columns = reflector .properties (Column .key );
139- const params = reflector .parameters (Inject .key );
167+ const params = reflector .parameters (Param .key );
140168```
141169
142170## Interceptors
0 commit comments