[英]How to register generic interface with a non generic class
編輯:我原來的問題被不必要的細節污染了。
這是一種更簡單的詢問方式。
我有這個 class:
public class ComplexDisplayableFinder3 : IDisplayableFinder<ComplexDisplayableDto>
和這個
public class ComplexDisplayableFinder2 : IDisplayableFinder<ComplexDisplayableDto>
還有那個
public class ComplexDisplayableFinder1 : IDisplayableFinder<ComplexDisplayableDto>
IDisplayableFinder 接口是通用的。 這是它的代碼:
public interface IDisplayableFinder<T>
where T : IDisplayableDto
{
Task<List<T>> Find();
}
如何使用 Unity 的 DI 容器注冊這些類?
我已經嘗試解決這 3 個類調用這個 function:
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 >
的問題。 為此,您必須使您的界面協變或逆變。
IE
IDisplayableFinder<in T>
要么
IDisplayableFinder<out T>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.