假设我有一个继承另一个接口的接口:
public interface IInvoiceFactory : IConfigFactory<Invoice, InvoiceRequest>
这不会解决:
container.RegisterType<IConfigFactory<Invoice, InvoiceRequest>, IInvoiceFactory>();
container.RegisterType<IInvoiceFactory, InvoiceFactory>();
是否可以让接口继承DI世界中的另一个接口?
答案 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
来解决该问题。