在Unity中,如何将命名依赖项与其他依赖项一起注入到构造函数中?

时间:2018-07-26 18:38:04

标签: c# dependency-injection inversion-of-control unity-container

我有一个具有某些依赖项的服务,但是其中之一是命名依赖项。因此,要配置我的Unity容器以注入它。

我有这样的东西:

在Unity容器中注册类型:

container.RegisterType<IOtherService, Implementation>("SpecificImp);
container.RegisterType<IOtherService, OtherImplementation>("otherImp");

container.RegisterType<IService, Service>(
    new InjectionConstructor(                  // Explicitly specify a constructor
        new ResolvedParameter<IOtherService>("SpecificImp") // Resolve parameter of type IRepository using name "Client"
    )
);

服务:

puclic class Service : IService
{
     private read-only IOtherService _otherService;
     private read-only IworkContext _workContext;

    public Service(
        IOtherService otherService,
        IworkContext workContext)
    {
        _otherService = otherService;
        _workContext = workContext;
    }
}

但是编译器告诉我一个错误,

“实施”没有带有“ IOtherService”参数的构造器。

那么,谁可以配置mi容器以注入正确的实现?

1 个答案:

答案 0 :(得分:0)

如果要明确指定任何构造函数参数,则需要指定该构造函数的所有参数

container.RegisterType<IService, Service>(
    new InjectionConstructor(                  // Explicitly specify a constructor
        new ResolvedParameter<IOtherService>("SpecificImp"), // Resolve parameter of type IRepository using name "Client"
    new ResolvedParameter<IworkContext>()
)