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<>));
所以我有一个接口 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<>));