# InjectorService Class
Module | import { InjectorService } from "@tsed/di" |
---|---|
Source | /packages/di/src/services/InjectorService.ts |
# Overview
class InjectorService extends Container {
settings: TsED.Configuration & DIConfiguration;
logger: IDILogger;
<span class="token keyword">constructor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
get <span class="token function">resolvers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">import</span><span class="token punctuation">(</span>"../interfaces"<span class="token punctuation">)</span>.<a href="/api/di/interfaces/IDIResolver.html"><span class="token">IDIResolver</span></a><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
get <span class="token function">scopes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
<span class="token punctuation">[</span>key<span class="token punctuation">:</span> <span class="token keyword">string</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/ProviderScope.html"><span class="token">ProviderScope</span></a><span class="token punctuation">;</span>
<span class="token punctuation">}</span> & <span class="token punctuation">{</span>
<span class="token punctuation">[</span>key<span class="token punctuation">:</span> <span class="token keyword">string</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/ProviderScope.html"><span class="token">ProviderScope</span></a><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
/**
* Retrieve default scope for a given provider.
* @param provider
*/
<span class="token function">scopeOf</span><span class="token punctuation">(</span>provider<span class="token punctuation">:</span> <a href="/api/di/class/Provider.html"><span class="token">Provider</span></a><<span class="token keyword">any</span>><span class="token punctuation">)</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/ProviderScope.html"><span class="token">ProviderScope</span></a><span class="token punctuation">;</span>
/**
* Clone a provider <span class="token keyword">from</span> <a href="/api/di/registries/GlobalProviders.html"><span class="token">GlobalProviders</span></a> and the given token. forkProvider method build automatically the provider if the instance parameter ins't given.
* @param token
* @param instance
*/
<span class="token function">forkProvider</span><span class="token punctuation">(</span>token<span class="token punctuation">:</span> <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> instance?<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <a href="/api/di/class/Provider.html"><span class="token">Provider</span></a><span class="token punctuation">;</span>
/**
* Return a list of instance build by the injector.
*/
<span class="token function">toArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
/**
* <a href="/api/common/mvc/decorators/method/Get.html"><span class="token">Get</span></a> a service or factory already constructed <span class="token keyword">from</span> his symbol or <span class="token keyword">class</span>.
*
* #### <a href="/api/swagger/decorators/Example.html"><span class="token">Example</span></a>
*
* ```typescript
* <span class="token keyword">import</span> <span class="token punctuation">{</span>InjectorService<span class="token punctuation">}</span> <span class="token keyword">from</span> "@tsed/common"<span class="token punctuation">;</span>
* <span class="token keyword">import</span> MyService <span class="token keyword">from</span> "./services"<span class="token punctuation">;</span>
*
* <span class="token keyword">class</span> OtherService <span class="token punctuation">{</span>
* <span class="token keyword">constructor</span><span class="token punctuation">(</span>injectorService<span class="token punctuation">:</span> InjectorService<span class="token punctuation">)</span> <span class="token punctuation">{</span>
* <span class="token keyword">const</span> myService<span class="token punctuation"> = </span>injectorService.get<MyService><span class="token punctuation">(</span>MyService<span class="token punctuation">)</span><span class="token punctuation">;</span>
* <span class="token punctuation">}</span>
* <span class="token punctuation">}</span>
* ```
*
* @param token The <span class="token keyword">class</span> or symbol registered in InjectorService.
* @param options
* @returns <span class="token punctuation">{</span><span class="token keyword">boolean</span><span class="token punctuation">}</span>
*/
get<T<span class="token punctuation"> = </span><span class="token keyword">any</span>><span class="token punctuation">(</span>token<span class="token punctuation">:</span> <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> options?<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">)</span><span class="token punctuation">:</span> T | undefined<span class="token punctuation">;</span>
/**
* The <span class="token function">has</span><span class="token punctuation">(</span><span class="token punctuation">)</span> method returns a <span class="token keyword">boolean</span> indicating whether an element with the specified key exists or not.
* @returns <span class="token punctuation">{</span><span class="token keyword">boolean</span><span class="token punctuation">}</span>
* @param token
*/
<span class="token function">has</span><span class="token punctuation">(</span>token<span class="token punctuation">:</span> <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">boolean</span><span class="token punctuation">;</span>
/**
* Invoke the <span class="token keyword">class</span> and inject all services that required by the <span class="token keyword">class</span> <span class="token keyword">constructor</span>.
*
* #### <a href="/api/swagger/decorators/Example.html"><span class="token">Example</span></a>
*
* ```typescript
* <span class="token keyword">import</span> <span class="token punctuation">{</span>InjectorService<span class="token punctuation">}</span> <span class="token keyword">from</span> "@tsed/common"<span class="token punctuation">;</span>
* <span class="token keyword">import</span> MyService <span class="token keyword">from</span> "./services"<span class="token punctuation">;</span>
*
* <span class="token keyword">class</span> OtherService <span class="token punctuation">{</span>
* <span class="token keyword">constructor</span><span class="token punctuation">(</span>injectorService<span class="token punctuation">:</span> InjectorService<span class="token punctuation">)</span> <span class="token punctuation">{</span>
* <span class="token keyword">const</span> myService<span class="token punctuation"> = </span>injectorService.invoke<MyService><span class="token punctuation">(</span>MyService<span class="token punctuation">)</span><span class="token punctuation">;</span>
* <span class="token punctuation">}</span>
* <span class="token punctuation">}</span>
* ```
*
* @param token The injectable <span class="token keyword">class</span> to invoke. Class parameters are injected according <span class="token keyword">constructor</span> signature.
* @param locals Optional object. If preset then <span class="token keyword">any</span> argument Class are read <span class="token keyword">from</span> this object first<span class="token punctuation">,</span> before the `InjectorService` is consulted.
* @param options
* @returns <span class="token punctuation">{</span>T<span class="token punctuation">}</span> The <span class="token keyword">class</span> constructed.
*/
invoke<T><span class="token punctuation">(</span>token<span class="token punctuation">:</span> <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> locals?<span class="token punctuation">:</span> Map<<a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> <span class="token keyword">any</span>><span class="token punctuation">,</span> options?<span class="token punctuation">:</span> Partial<<a href="/api/testing/IInvokeOptions.html"><span class="token">IInvokeOptions</span></a><T>><span class="token punctuation">)</span><span class="token punctuation">:</span> T<span class="token punctuation">;</span>
/**
* Build only providers which are asynchronous.
*/
<span class="token function">loadAsync</span><span class="token punctuation">(</span>locals?<span class="token punctuation">:</span> <a href="/api/di/class/LocalsContainer.html"><span class="token">LocalsContainer</span></a><<span class="token keyword">any</span>><span class="token punctuation">)</span><span class="token punctuation">:</span> Promise<<a href="/api/di/class/LocalsContainer.html"><span class="token">LocalsContainer</span></a><<span class="token keyword">any</span>>><span class="token punctuation">;</span>
<span class="token function">loadSync</span><span class="token punctuation">(</span>locals?<span class="token punctuation">:</span> <a href="/api/di/class/LocalsContainer.html"><span class="token">LocalsContainer</span></a><<span class="token keyword">any</span>><span class="token punctuation">)</span><span class="token punctuation">:</span> <a href="/api/di/class/LocalsContainer.html"><span class="token">LocalsContainer</span></a><<span class="token keyword">any</span>><span class="token punctuation">;</span>
/**
* Build all providers <span class="token keyword">from</span> given container <span class="token punctuation">(</span>or <a href="/api/di/registries/GlobalProviders.html"><span class="token">GlobalProviders</span></a><span class="token punctuation">)</span> and emit `$onInit` event.
*
* @param container
*/
<span class="token function">load</span><span class="token punctuation">(</span>container?<span class="token punctuation">:</span> Map<<a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> <a href="/api/di/class/Provider.html"><span class="token">Provider</span></a><<span class="token keyword">any</span>>><span class="token punctuation">)</span><span class="token punctuation">:</span> Promise<<a href="/api/di/class/LocalsContainer.html"><span class="token">LocalsContainer</span></a><<span class="token keyword">any</span>>><span class="token punctuation">;</span>
/**
* Load all configurations registered on providers
*/
<span class="token function">resolveConfiguration</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">void</span><span class="token punctuation">;</span>
/**
*
* @param instance
* @param locals
* @param options
*/
<span class="token function">bindInjectableProperties</span><span class="token punctuation">(</span>instance<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">,</span> locals<span class="token punctuation">:</span> Map<<a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> <span class="token keyword">any</span>><span class="token punctuation">,</span> options<span class="token punctuation">:</span> Partial<<a href="/api/testing/IInvokeOptions.html"><span class="token">IInvokeOptions</span></a>><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">void</span><span class="token punctuation">;</span>
/**
*
* @param instance
* @param <span class="token punctuation">{</span><span class="token keyword">string</span><span class="token punctuation">}</span> propertyKey
*/
<span class="token function">bindMethod</span><span class="token punctuation">(</span>instance<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> propertyKey <span class="token punctuation">}</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/IInjectablePropertyService.html"><span class="token">IInjectablePropertyService</span></a><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">void</span><span class="token punctuation">;</span>
/**
*
* @param instance
* @param <span class="token punctuation">{</span><span class="token keyword">string</span><span class="token punctuation">}</span> propertyKey
* @param <span class="token punctuation">{</span><span class="token keyword">any</span><span class="token punctuation">}</span> useType
* @param locals
* @param invokeOptions
*/
<span class="token function">bindProperty</span><span class="token punctuation">(</span>instance<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> propertyKey<span class="token punctuation">,</span> useType<span class="token punctuation">,</span> onGet<span class="token punctuation">,</span> options <span class="token punctuation">}</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/IInjectablePropertyService.html"><span class="token">IInjectablePropertyService</span></a><span class="token punctuation">,</span> locals<span class="token punctuation">:</span> Map<<a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">,</span> <span class="token keyword">any</span>><span class="token punctuation">,</span> invokeOptions<span class="token punctuation">:</span> Partial<<a href="/api/testing/IInvokeOptions.html"><span class="token">IInvokeOptions</span></a>><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">void</span><span class="token punctuation">;</span>
/**
*
* @param instance
* @param <span class="token punctuation">{</span><span class="token keyword">string</span><span class="token punctuation">}</span> propertyKey
* @param <span class="token punctuation">{</span><span class="token keyword">any</span><span class="token punctuation">}</span> useType
*/
<span class="token function">bindValue</span><span class="token punctuation">(</span>instance<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> propertyKey<span class="token punctuation">,</span> expression<span class="token punctuation">,</span> defaultValue <span class="token punctuation">}</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/IInjectablePropertyValue.html"><span class="token">IInjectablePropertyValue</span></a><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">void</span><span class="token punctuation">;</span>
/**
*
* @param instance
* @param <span class="token punctuation">{</span><span class="token keyword">string</span><span class="token punctuation">}</span> propertyKey
* @param <span class="token punctuation">{</span><span class="token keyword">any</span><span class="token punctuation">}</span> useType
*/
<span class="token function">bindConstant</span><span class="token punctuation">(</span>instance<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> propertyKey<span class="token punctuation">,</span> expression<span class="token punctuation">,</span> defaultValue <span class="token punctuation">}</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/IInjectablePropertyValue.html"><span class="token">IInjectablePropertyValue</span></a><span class="token punctuation">)</span><span class="token punctuation">:</span> PropertyDescriptor<span class="token punctuation">;</span>
/**
*
* @param instance
* @param propertyKey
* @param useType
* @param options
*/
<span class="token function">bindInterceptor</span><span class="token punctuation">(</span>instance<span class="token punctuation">:</span> <span class="token keyword">any</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> propertyKey<span class="token punctuation">,</span> useType<span class="token punctuation">,</span> options <span class="token punctuation">}</span><span class="token punctuation">:</span> <a href="/api/di/interfaces/IInjectablePropertyService.html"><span class="token">IInjectablePropertyService</span></a><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">void</span><span class="token punctuation">;</span>
<span class="token keyword">protected</span> <span class="token function">ensureProvider</span><span class="token punctuation">(</span>token<span class="token punctuation">:</span> <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a><span class="token punctuation">)</span><span class="token punctuation">:</span> <a href="/api/di/class/Provider.html"><span class="token">Provider</span></a> | undefined<span class="token punctuation">;</span>
/**
* Invoke a <span class="token keyword">class</span> method and inject service.
*
* #### IInjectableMethod options
*
* * **target**<span class="token punctuation">:</span> Optional. The <span class="token keyword">class</span> instance.
* * **methodName**<span class="token punctuation">:</span> `<span class="token keyword">string</span>` Optional. The method name.
* * **designParamTypes**<span class="token punctuation">:</span> `<span class="token keyword">any</span><span class="token punctuation">[</span><span class="token punctuation">]</span>` Optional. List of injectable types.
* * **locals**<span class="token punctuation">:</span> `Map<Function<span class="token punctuation">,</span> <span class="token keyword">any</span>>` Optional. If preset then <span class="token keyword">any</span> argument Class are read <span class="token keyword">from</span> this object first<span class="token punctuation">,</span> before the `InjectorService` is consulted.
*
* #### <a href="/api/swagger/decorators/Example.html"><span class="token">Example</span></a>
*
* @param target
* @param locals
* @param options
* @<span class="token keyword">private</span>
*/
/**
* Create options to invoke a provider or <span class="token keyword">class</span>.
* @param token
* @param locals
* @param options
*/
}
# Description
This service contain all services collected by @Service
or services declared manually with InjectorService.factory()
or InjectorService.service()
.
# Example:
import {InjectorService} from "@tsed/common";
// Import the services (all services are decorated with @Service()";
import MyService1 from "./services/service1";
import MyService2 from "./services/service2";
import MyService3 from "./services/service3";
// When all services is imported you can load InjectorService.
const injector = new InjectorService()
await injector.load();
const myService1 = injector.get<MyService1>(MyServcice1);
2
3
4
5
6
7
8
9
10
11
12
13
# Members
settings: TsED.Configuration & DIConfiguration;
logger: IDILogger;
get resolvers(): import("../interfaces").IDIResolver[];
get scopes(): {
[key: string]: ProviderScope;
} & {
[key: string]: ProviderScope;
};
scopeOf(provider: Provider<any>): ProviderScope;
Retrieve default scope for a given provider.
forkProvider(token: TokenProvider, instance?: any): Provider;
Clone a provider from GlobalProviders and the given token. forkProvider method build automatically the provider if the instance parameter ins't given.
toArray(): any[];
Return a list of instance build by the injector.
get<T = any>(token: TokenProvider, options?: any): T | undefined;
Param | Type | Description |
---|---|---|
token | <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a> | The class or symbol registered in InjectorService. |
Get a service or factory already constructed from his symbol or class.
# Example
import {InjectorService} from "@tsed/common";
import MyService from "./services";
class OtherService {
constructor(injectorService: InjectorService) {
const myService = injectorService.get<MyService>(MyService);
}
}
2
3
4
5
6
7
8
has(token: TokenProvider): boolean;
The has() method returns a boolean indicating whether an element with the specified key exists or not.
invoke<T>(token: TokenProvider, locals?: Map<TokenProvider, any>, options?: Partial<IInvokeOptions<T>>): T;
Param | Type | Description |
---|---|---|
token | <a href="/api/di/interfaces/TokenProvider.html"><span class="token">TokenProvider</span></a> | The injectable class to invoke. Class parameters are injected according constructor signature. locals |
Invoke the class and inject all services that required by the class constructor.
# Example
import {InjectorService} from "@tsed/common";
import MyService from "./services";
class OtherService {
constructor(injectorService: InjectorService) {
const myService = injectorService.invoke<MyService>(MyService);
}
}
2
3
4
5
6
7
8
loadAsync(locals?: LocalsContainer<any>): Promise<LocalsContainer<any>>;
Build only providers which are asynchronous.
loadSync(locals?: LocalsContainer<any>): LocalsContainer<any>;
load(container?: Map<TokenProvider, Provider<any>>): Promise<LocalsContainer<any>>;
Build all providers from given container (or GlobalProviders) and emit $onInit
event.
resolveConfiguration(): void;
Load all configurations registered on providers
bindInjectableProperties(instance: any, locals: Map<TokenProvider, any>, options: Partial<IInvokeOptions>): void;
bindMethod(instance: any, { propertyKey }: IInjectablePropertyService): void;
bindProperty(instance: any, { propertyKey, useType, onGet, options }: IInjectablePropertyService, locals: Map<TokenProvider, any>, invokeOptions: Partial<IInvokeOptions>): void;
bindValue(instance: any, { propertyKey, expression, defaultValue }: IInjectablePropertyValue): void;
bindConstant(instance: any, { propertyKey, expression, defaultValue }: IInjectablePropertyValue): PropertyDescriptor;
bindInterceptor(instance: any, { propertyKey, useType, options }: IInjectablePropertyService): void;
protected ensureProvider(token: TokenProvider): Provider | undefined;
- Session & cookies
- Passport.js
- TypeORM
- Mongoose
- GraphQL
- Socket.io
- Swagger
- AJV
- Multer
- Serve static files
- Templating
- Throw HTTP Exceptions
- Customize 404
- AWS
- Jest
- Seq
- Controllers
- Providers
- Model
- Converters
- Middlewares
- Pipes
- Interceptors
- Authentication
- Hooks
- Injection scopes
- Custom providers
- Custom endpoint decorator
- Testing