Unity RegisterType用于自己接受服务的构造函数
本文关键字:服务 构造函数 RegisterType 用于 自己 Unity | 更新日期: 2023-09-27 18:11:36
我有两个服务IServiceA和IServiceB。IServiceB的具体实现如下所示:
public class ServiceB : IServiceB {
public ServiceB(string path, IServiceA serviceA) { ... }
}
所以我需要传入一个字符串和一个ServiceA
我不知道该怎么做。我现在就有这个:
var path = _config.Path;
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>(
new InjectionConstructor(path, container.Resolve<IServiceA>());
这显然是错误的,因为我实际上是在实例化一个ServiceA,并将一个实例注册为所有ServiceB。
我如何告诉Unity总是解决一个"新鲜"的服务?我试着从RegisterType中删除IServiceA,这会抛出一个异常,告诉我没有ctor(string)
,这是正确的,因为它是ctor(string,IServiceA)
。
没有特别详细的文档说明,但这似乎可以工作:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>(
new InjectionConstructor(path, new ResolvedParameter<IServiceA>()));
我建议在生产环境中使用它之前先测试一下。
相信你也能做到:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>(
new InjectionConstructor(path, typeof(IServiceA)));