Autofac如何解析具有开放泛型类的开放泛型接口

4

我有一个接口和一个类:

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

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

我会有一些需要调用它的类:

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

我已经尝试了各种方法,但无法注册开放式通用接口和类。

我只是想表达这样的意思:

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

如果我必须一个个明确地执行以下操作,那将会很烦人:
container.RegisterType<MyClass<AuditEntity>>().As<IMyInterface<AuditEntity>>();

这不应该很简单吗?

2个回答

9

您需要使用RegisterGeneric方法,具体请参见注册概念-开放式泛型组件

类似以下代码应该可以工作:

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

2

使用container.RegisterGeneric非常简单:

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

您在问题中的示例中似乎将接口和类混淆了。注册应该从想要注册的类型开始(例如 MyClass),然后是您希望其注册为的类型(例如 IMyInterface)。


是的,我刚刚注意到了。我太习惯使用Unity、Ninject了,所以当涉及到autofac时,它的方式恰好相反。 - Callum Linington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接