Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nestjs在useFactory中实例化服务类_Nestjs_Nestjs Services_Nestjs Providers - Fatal编程技术网

Nestjs在useFactory中实例化服务类

Nestjs在useFactory中实例化服务类,nestjs,nestjs-services,nestjs-providers,Nestjs,Nestjs Services,Nestjs Providers,我在检查nestjs模块的一个源代码()时发现了一些奇怪的东西。一致: 当我们使用useFactory时,我们告诉我们在应用程序中使用ProviderService(无论注入令牌是什么)进行注入时,应该调用Nest函数。这似乎是因为app不是一个可立即注入的值(这可以通过将其设置为自定义提供程序来修复,但我猜nestjs firebase admin团队认为这是一个更简单的解决方案)。因此,firebase管理团队决定自己实例化提供者,而不是因为无法自动注入app而产生注入错误。这也是一种非常有

我在检查nestjs模块的一个源代码()时发现了一些奇怪的东西。一致:


当我们使用
useFactory
时,我们告诉我们在应用程序中使用
ProviderService
(无论注入令牌是什么)进行注入时,应该调用Nest函数。这似乎是因为
app
不是一个可立即注入的值(这可以通过将其设置为自定义提供程序来修复,但我猜
nestjs firebase admin
团队认为这是一个更简单的解决方案)。因此,firebase管理团队决定自己实例化提供者,而不是因为无法自动注入
app
而产生注入错误。这也是一种非常有效的方法,并且像
useFactory
这样的东西存在的原因(尽管,他们可以很容易地使用
useValue:newproviderservice(app)
并避免使用所有功能)。这只是做事情的另一种方式

非常感谢。是否可以添加首选方法(自定义提供程序)实现?(不需要精确的代码,我只想看看这个概念)我个人喜欢
useClass
,因为在很多情况下(至少对于动态模块),它允许使用干净的模块。您还可以将factory函数提取到其他文件。这完全取决于形势的需要。需要注射吗<代码>使用类或
使用工厂
。有一个你想使用但不想实例化的类吗<代码>使用类。需要传递一个字符串或对象吗<代码>使用值。我知道所有这些都有用例,当我们想在模块中注入对象时,我们使用
useValue
,我们使用
useClass
以同样的方式实现类。我们如何在这个场景中使用
useClass
。所以我可以接受。但是仍然不知道
useClass
和自定义提供程序实现:DIt取决于如何导出所有内容。您可以创建一个直接提供程序,只为提供的实例提供一个注入令牌,并使用
@Inject(token)
注入它。创建这些包装器方法的服务只是为了(希望)实现更好的devxp,但需要注意
  private static createProviders(app: admin.app.App): Provider<any>[] {
    return PROVIDERS.map<Provider>((ProviderService) => ({
      provide: ProviderService,
      // here, instantiate each service class
      useFactory: () => new ProviderService(app),
    }));
  }
const PROVIDERS = [
  FirebaseAuthenticationService,
  FirebaseMessagingService,
  FirebaseRemoteConfigService,
  FirebaseDatabaseService,
  FirebaseFirestoreService,
  FirebaseStorageService,
];