簡體   English   中英

如何使用非通用 class 注冊通用接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM