ble*_*dev 8 dependency-injection nestjs
我想将某些类/库与 NestJs 分离。这些类被声明为没有@Injectable
装饰器的常规类,并且可能具有进一步的依赖项。
将它们注入我的 Nest 应用程序的最佳方式是什么?有没有办法可以在导入后将它们装饰为可注入?我尝试过类似的事情:
import { MyClass } from '@my-library/my-class';
import { MyClassDep } from '@my-library/my-class';
function makeInjectable<T>(target: Type<T>): Type<T> {
Injectable()(target);
return target;
}
@Module({
controllers: [],
providers: [
makeInjectable(myClass),
makeInjectable(myClassDep),
],
})
export class UsersModule {}
Run Code Online (Sandbox Code Playgroud)
没有成功。到目前为止,我的解决方案是使用 useFactory 手动提供这些,但这并不理想:
import { MyClass } from '@my-library/my-class';
import { MyClassDep } from '@my-library/my-class';
@Module({
controllers: [],
providers: [
{ provide: MyClass, useFactory: (myClassDep: MyClassDep) => new MyClass(myDep), inject: [MyClassDep] },
{ provide: MyClassDep, useFactory: () => new MyClassDep(), inject: [] },
],
})
export class UsersModule {}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?
尝试使用工厂提供商:
import { MyClass } from '@my-library/my-class';
import { MyClassDep } from '@my-library/my-class';
function makeInjectable<T>(target: Type<T>): Type<T> {
return {
provide: target.constructor.name,
useFactory: () => new target(),
};
}
@Module({
controllers: [],
providers: [
makeInjectable(myClass),
makeInjectable(myClassDep),
],
})
export class UsersModule {}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4271 次 |
最近记录: |