填写这份《一分钟调查》,帮我们(开发组)做得更好!去填写Home

InjectionToken

Creates a token that can be used in a DI Provider.

查看"说明"...

      
      class InjectionToken<T> {
  constructor(_desc: string, options?: { providedIn?: Type<any> | "root" | "platform" | "any"; factory: () => T; })
  protected _desc: string
  toString(): string
}
    

说明

Use an InjectionToken whenever the type you are injecting is not reified (does not have a runtime representation) such as when injecting an interface, callable type, array or parameterized type.

InjectionToken is parameterized on T which is the type of object which will be returned by the Injector. This provides additional level of type safety.

interface MyInterface {...} var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken')); // myInterface is inferred to be MyInterface.
      
      interface MyInterface {...}
var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));
// myInterface is inferred to be MyInterface.
    

When creating an InjectionToken, you can optionally specify a factory function which returns (possibly by creating) a default value of the parameterized type T. This sets up the InjectionToken using this factory as a provider as if it was defined explicitly in the application's root injector. If the factory function, which takes zero arguments, needs to inject dependencies, it can do so using the inject function. See below for an example.

Additionally, if a factory is specified you can also specify the providedIn option, which overrides the above behavior and marks the token as belonging to a particular @NgModule. As mentioned above, 'root' is the default value for providedIn.

构造函数

constructor(_desc: string, options?: { providedIn?: Type<any> | "root" | "platform" | "any"; factory: () => T; })
      
      constructor(_desc: string, options?: { providedIn?: Type<any> | "root" | "platform" | "any"; factory: () => T; })
    
参数
_desc string
options object

可选. 默认值是 undefined.

属性

属性说明
protected _desc: stringDeclared in constructor.

方法

toString(): string
      
      toString(): string
    
参数

没有参数。

返回值

string

使用说明

Basic Example

Plain InjectionToken

const BASE_URL = new InjectionToken<string>('BaseUrl'); const injector = Injector.create({providers: [{provide: BASE_URL, useValue: 'http://localhost'}]}); const url = injector.get(BASE_URL); // here `url` is inferred to be `string` because `BASE_URL` is `InjectionToken<string>`. expect(url).toBe('http://localhost');
      
      const BASE_URL = new InjectionToken<string>('BaseUrl');
const injector =
    Injector.create({providers: [{provide: BASE_URL, useValue: 'http://localhost'}]});
const url = injector.get(BASE_URL);
// here `url` is inferred to be `string` because `BASE_URL` is `InjectionToken<string>`.
expect(url).toBe('http://localhost');
    

Tree-shakable InjectionToken

class MyService { constructor(readonly myDep: MyDep) {} } const MY_SERVICE_TOKEN = new InjectionToken<MyService>('Manually constructed MyService', { providedIn: 'root', factory: () => new MyService(inject(MyDep)), }); const instance = injector.get(MY_SERVICE_TOKEN); expect(instance instanceof MyService).toBeTruthy(); expect(instance.myDep instanceof MyDep).toBeTruthy();
      
      class MyService {
  constructor(readonly myDep: MyDep) {}
}

const MY_SERVICE_TOKEN = new InjectionToken<MyService>('Manually constructed MyService', {
  providedIn: 'root',
  factory: () => new MyService(inject(MyDep)),
});

const instance = injector.get(MY_SERVICE_TOKEN);
expect(instance instanceof MyService).toBeTruthy();
expect(instance.myDep instanceof MyDep).toBeTruthy();