Autofac 使用 Open Generic Class 解析 Open Generic Interface

Autofac Resolve Open Generic Interface with Open Generic Class

所以我有一个接口 class:

public interface IMyInterface<T> where T : ISomeEntity {}

public class MyClass<T> : IMyInterface<T>
    where T : ISomeEntity {}

我会有一些需要的 class:

public class SomeClass : ISomeClass
{
    public SomeClass (IMyInterface<AuditEntity> myInterface) {}
}

我做了各种各样的事情来让它注册开放的通用接口,但 class 没有运气。

我只想说:

container.RegisterType(typeof(MyClass<>)).As(typeof(IMyInterface<>));

如果我必须通过并明确地做类似这样的事情,那会很烦人:

container.RegisterType<MyClass<AuditEntity>>().As<IMyInterface<AuditEntity>>();

这不应该是微不足道的吗?

是的,container.RegisterGeneric:

container.RegisterGeneric(typeof(MyClass<>)).As(typeof(IMyInterface <>));

你似乎也有你的界面和 class 在你问题的例子中切换。注册应以要注册的类型(例如 MyClass)开头,然后是您要注册的类型(例如 IMyInterface)。

您必须使用 RegisterGeneric 方法,请参阅 Registration Concepts - Open Generic Components

像这样的东西应该有效:

builder.RegisterGeneric(typeof(MyClass<>)).As(typeof(IMyInterface<>));