如何向非泛型类注册泛型接口



编辑:我最初的问题充斥着不必要的细节。

这里有一个更简单的提问方式。

我有这个班:

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>

最新更新