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

C# 如何注册从Unity中的接口继承的接口,c#,unity-container,C#,Unity Container,假设我有一个继承另一个接口的接口: public interface IInvoiceFactory : IConfigFactory<Invoice, InvoiceRequest> 公共接口IInvoiceFactory:IConfigFactory 这并不能解决以下问题: container.RegisterType<IConfigFactory<Invoice, InvoiceRequest>, IInvoiceFactory>(); contai

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

public interface IInvoiceFactory : IConfigFactory<Invoice, InvoiceRequest>
公共接口IInvoiceFactory:IConfigFactory 这并不能解决以下问题:

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

有可能让一个接口继承DI世界中的另一个接口吗?

您可以这样做,这不是您想要的,但可以解决您需要的问题:

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

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

以下是我如何解决这个问题的:

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

container.RegisterType<IInvoiceFactory, InvoiceFactory>();
container.RegisterType(
新注入工厂(c=>c.Resolve());
container.RegisterType();

您还可以使用NamedRegistration和不同的
终身管理器来解决此问题。

是的,我可以通过避开您的答案来节省几行代码并抽象出一点复杂性,这就是我直到今天为止一直在使用的;)如果我没有得到一个好的答案,我想我会在Unity中将其视为不可能(可能不是其他DI容器),然后回到原来的方式。
container.RegisterType<IConfigFactory<Invoice, InvoiceRequest>, IInvoiceFactory>(
    new InjectionFactory(c => c.Resolve<IInvoiceFactory>()));

container.RegisterType<IInvoiceFactory, InvoiceFactory>();