是否可以使用tsyringe混合注入运行时值和正常依赖项



我使用的是@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

最新更新