我使用的是@launchtray/tsyringe(一个支持异步初始化的Microsoft tsyrine的分支(,它非常方便。
我想实现如下内容:
一个编排服务,其构造函数接受依赖服务(可以使用@inject-decorator注入(和运行时值:
@injectable()
class OrchestrationService {
constructor(
@inject(ServiceA) private dependencyA: ServiceA,
@inject(ServiceA) private dependencyB: ServiceB,
runtimeValue: string,
) {
this.init(runtimeValue);
}
}
然后我可以使用运行时值以某种方式解析该实例:
const orchestrationService = container.resolve<OrchestrationService>(runtimeValue);
我不知道所有可能的运行时值,因此无法预先注册它们。
我想知道注入运行时值是否可能,以及如何实现这一点。
我在tsyringe github repo中发布了同样的问题,Andrey Khapugin回答了我的问题。这并不完美,但我认为这是我们能得到的最好的。
您可以在容器中注册值
const SomeToken:InjectionToken<string> = "MyToken"; class Service{ constructor( @inject(ServiceA) private dependencyA: ServiceA, @inject(ServiceA) private dependencyB: ServiceB, @inject(SomeToken) runtimeValue: string, ) } container.registerInstance(SomeToken, "runtimeValue"); container.resolve(SomeToken); // runtimeValue container.resolve(Service); // Service instance
https://github.com/microsoft/tsyringe#injecting-名为注入的基元值
https://github.com/microsoft/tsyringe/issues/193#issuecomment-1084181366