sudo apt-get install nginx-extras-dbg
和useValue
提供商之间有什么区别?
似乎useFactory
返回一个值,useFactory
也会返回一个值。
答案 0 :(得分:16)
useFactory
接受一个工厂函数,该函数应该返回该值,并且还可以具有依赖项(需要将其他提供程序的实例作为参数传递)例如,请参阅How to pass parameters rendered from backend to angular2 bootstrap method
中工厂函数所需的config:ConfigService
参数
useValue
只是按原样注入的值
useClass
需要一个类型名称,Angular会根据传递的类型创建一个实例,如果有任何
还有useExisting
,它类似于已注册的提供商的别名。用例是为提供者提供不同密钥的相同实例。
有关示例,请参阅Angular 2 useExisting providers。
答案 1 :(得分:10)
useValue:
会分配当前您提供的任何已分配对象实例。
useFactory
:它也是一样的,您可以在function
内部基于其他依赖项配置工厂对象,然后再返回它的实例。
{
provide: CustomDependency,
useFactory: () => {
if (IS_A) {
return new A();
} else {
return new B();
}
}
}
您可以使用
useFactory
配置您的依赖项 在配置时。与config
阶段Angular 1的相同, 你正在修改或形成依赖的地方。
答案 2 :(得分:1)
我的基本理解...
您可以认为useValue
大致上是静态分配;提供商遵循ValueProvider界面:
鉴于您在使用'12345'
时总是想要值@Inject(INJECTION_TOKEN)
,那么它将起作用,
providers: [
{
provide: INJECTION_TOKEN,
useValue: '12345',
},
],
使用@Inject(INJECTION_TOKEN)
时,它将始终返回'1234'。
鉴于,
providers: [
{
provide: INJECTION_TOKEN,
useValue: () => '12345',
},
],
将为INJECTION_TOKEN
提供一个函数,该函数将返回“ 12345”。
useFactory
需要一个函数来产生注入值。工厂函数的返回值是注入的值。 useFactory
个提供者类型使用FactoryProvider interface。可以添加deps
的可选数组,以允许将参数传递给工厂函数。
最后,useClass
,
配置Injector返回令牌的useClass实例。 [1]
注入器将提供所提供类的实例。值得注意的是,注入器还将在useClass
[1]接口上提供Type<any>
,字段值类型ClassProvider
的注入依赖项。
总结一下,选择useValue
每次提供相同的注入值*,useFactory
应当在运行时计算注入值,而useClass
则要构造注射器值Type<any>
来提供。
*注意:提供给useValue
的值可以是一个函数,因此,如果注入的值被调用,则可以生成动态值,因为它是一个函数。
[1] ClassProvider