@yaagoub/decorators
Version:
Angular decorators
46 lines • 3.85 kB
JavaScript
/**
* @description
* The `YgbInjector` class provides a static way to set and use an Angular `Injector`.
* This allows for dependency injection to be managed and accessed globally within the application.
*
* @example
* To set the injector, use the following code in your `app.config.ts`:
* ```typescript
* {
* provide: APP_INITIALIZER,
* useFactory: (injector: Injector) => () => YgbInjector.setInjector(injector),
* deps: [Injector],
* multi: true,
* }
* ```
*
* @example
* To inject a dependency:
* ```typescript
* const myService = YgbInjector.inject<MyService>(MyService);
* ```
*/
// ❌ DO NOT decorate with @Injectable()
export class YgbInjector {
static injector;
static setInjector(injector) {
if (YgbInjector.injector)
return;
YgbInjector.injector = injector;
}
static inject(token) {
if (!YgbInjector.injector) {
throw new Error(`
Injector has not been set. Use the following code in your app.config.ts:
{
provide: APP_INITIALIZER,
useFactory: (injector: Injector) => () => YgbInjector.setInjector(injector),
deps: [Injector],
multi: true,
},
`);
}
return YgbInjector.injector.get(token);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWdiLWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZWNvcmF0b3JzL3NyYy9nbG9iYWwveWdiLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFJSCx1Q0FBdUM7QUFDdkMsTUFBTSxPQUFPLFdBQVc7SUFDZCxNQUFNLENBQUMsUUFBUSxDQUFXO0lBRWxDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBa0I7UUFDbkMsSUFBSSxXQUFXLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDakMsV0FBVyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUksS0FBVTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUM7Ozs7Ozs7O1NBUWIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgWWdiSW5qZWN0b3JgIGNsYXNzIHByb3ZpZGVzIGEgc3RhdGljIHdheSB0byBzZXQgYW5kIHVzZSBhbiBBbmd1bGFyIGBJbmplY3RvcmAuXG4gKiBUaGlzIGFsbG93cyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gdG8gYmUgbWFuYWdlZCBhbmQgYWNjZXNzZWQgZ2xvYmFsbHkgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogVG8gc2V0IHRoZSBpbmplY3RvciwgdXNlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiB5b3VyIGBhcHAuY29uZmlnLnRzYDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHtcbiAqICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICogICB1c2VGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoKSA9PiBZZ2JJbmplY3Rvci5zZXRJbmplY3RvcihpbmplY3RvciksXG4gKiAgIGRlcHM6IFtJbmplY3Rvcl0sXG4gKiAgIG11bHRpOiB0cnVlLFxuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFRvIGluamVjdCBhIGRlcGVuZGVuY3k6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBteVNlcnZpY2UgPSBZZ2JJbmplY3Rvci5pbmplY3Q8TXlTZXJ2aWNlPihNeVNlcnZpY2UpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vLyDinYwgRE8gTk9UIGRlY29yYXRlIHdpdGggQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFlnYkluamVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gIHN0YXRpYyBzZXRJbmplY3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAoWWdiSW5qZWN0b3IuaW5qZWN0b3IpIHJldHVybjtcbiAgICBZZ2JJbmplY3Rvci5pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGluamVjdDxUPih0b2tlbjogYW55KTogVCB7XG4gICAgaWYgKCFZZ2JJbmplY3Rvci5pbmplY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcbiAgSW5qZWN0b3IgaGFzIG5vdCBiZWVuIHNldC4gVXNlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiB5b3VyIGFwcC5jb25maWcudHM6XG4gIHtcbiAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgdXNlRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gKCkgPT4gWWdiSW5qZWN0b3Iuc2V0SW5qZWN0b3IoaW5qZWN0b3IpLFxuICAgIGRlcHM6IFtJbmplY3Rvcl0sXG4gICAgbXVsdGk6IHRydWUsXG4gIH0sXG4gICAgICAgIGApO1xuICAgIH1cbiAgICByZXR1cm4gWWdiSW5qZWN0b3IuaW5qZWN0b3IuZ2V0KHRva2VuKTtcbiAgfVxufVxuIl19