编辑:我最初的问题充斥着不必要的细节。
这里有一个更简单的提问方式。
我有这个班:
public class ComplexDisplayableFinder3 : IDisplayableFinder<ComplexDisplayableDto>
这个
public class ComplexDisplayableFinder2 : IDisplayableFinder<ComplexDisplayableDto>
那个
public class ComplexDisplayableFinder1 : IDisplayableFinder<ComplexDisplayableDto>
IDisplayableFinder接口为Generic。这是它的代码:
public interface IDisplayableFinder<T>
where T : IDisplayableDto
{
Task<List<T>> Find();
}
如何在Unity的DI Container中注册这些类?
我已经尝试解决这3个调用此函数的类:
static IUnityContainer CreateContainerAndRegisterClasses()
{
IUnityContainer container = new UnityContainer();
container.RegisterType(typeof(IDisplayableFinder<>), typeof(ComplexDisplayableFinder1), "1");
container.RegisterType(typeof(IDisplayableFinder<>), typeof(ComplexDisplayableFinder2), "2");
container.RegisterType(typeof(IDisplayableFinder<>), typeof(ComplexDisplayableFinder3), "3");
return container;
}
这是我最接近解决这个问题的一次。然而,我目前在运行时遇到一个异常,它说:没有可用于类型IDisplayableFinder<IDisplayableDto>
的公共构造函数。
如果我直接理解问题,您需要将IDisplayableFinder<ComplexDisplayableDto>
转换为IDisplayableFinder<IDisplayableDto >
。为了实现这一点,您必须使接口协变或逆变。
即
IDisplayableFinder<in T>
或
IDisplayableFinder<out T>