如何注册从Unity中的接口继承的接口

时间:2017-05-11 15:55:14

标签: c# unity-container

假设我有一个继承另一个接口的接口:

public interface IInvoiceFactory : IConfigFactory<Invoice, InvoiceRequest>

这不会解决:

container.RegisterType<IConfigFactory<Invoice, InvoiceRequest>, IInvoiceFactory>();
container.RegisterType<IInvoiceFactory, InvoiceFactory>();

是否可以让接口继承DI世界中的另一个接口?

2 个答案:

答案 0 :(得分:1)

你可以做到这一点,这不是你想要的,但可以解决你的需求:

container.RegisterType<IInvoiceFactory, InvoiceFactory>();
container.RegisterType<IConfigFactory<Invoice, InvoiceRequest>, InvoiceFactory>();

这意味着这两个都将解析InvoiceFactory的实例:

var factory = container.Resolve<IInvoiceFactory>();
var factory = container.Resolve<IConfigFactory<Invoice, InvoiceRequest>>();

其他容器为您提供了注册类型实现的所有接口的方法,我猜测Unity也提供了这种机制,因此可能有更好的方法。正如我所说,这取决于这是否能解决你的情况。

答案 1 :(得分:0)

以下是我解决此问题的方法:

container.RegisterType<IConfigFactory<Invoice, InvoiceRequest>, IInvoiceFactory>(
    new InjectionFactory(c => c.Resolve<IInvoiceFactory>()));

container.RegisterType<IInvoiceFactory, InvoiceFactory>();

您仍然可以使用NamedRegistration和不同的LifetimeManagers来解决该问题。