繁体   English   中英

当接口从MEF中的基本接口派生时如何导出类型

[英]How to export the type when interfaces are derived from base interface in MEF

以下是我的情况。 我试图在初始引导过程中使用“导出”功能将类型与接口相关联。 但是,MEF抱怨ImportCardinalityMismatchException.MEF我还很陌生,我不知道这里出了什么问题? 最简单的解决方法是删除继承。 但是,我想避免这种情况。

   public interface IColourService
    {
        Color GetColourByCountry(string countryName);
    }

    public interface IKnownColourService:IColourService
    {
        bool IsKnownCountry(string countryName);
    }

    public interface IUnKnownColourService:IColourService
    {
       bool IsUnKnownCountry(string countryName);
    }

    [Export(typeof(IColourService))]
    public class ColourService:IColourService
    {
       //implementation
    }

    [Export(typeof(IKnownColourService))]   
    public class KnownColourService:IKnownColourService
    {
       //implementation
    }

    [Export(typeof(IUnKnownColourService))]
    public class UnknownColourService:IUnKnownColourService
    {
       //implementation
    }

您是否不能将IColourService用作所有类的Export属性中的Type?

[Export(typeof(IColourService))]

然后,您可以使用以下属性声明访问它们:

[ImportMany]
public IEnumerable<IColourService> ColourServices { get; set; }

并添加一个辅助方法来获取特定类型:

public IEnumerable<T> GetServices<T>()
{
    return ColourServices.OfType<T>().ToList();
}

希望这可以帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM