C# 从MEF中的基接口派生接口时如何导出类型
下面是我的情景。我试图通过在初始引导期间使用导出功能将类型与接口相关联。然而,MEF抱怨ImportCardinalismatchException。我是MEF的新手,不知道这里出了什么问题?最简单的修复方法是删除继承。然而,我想避免它C# 从MEF中的基接口派生接口时如何导出类型,c#,dependency-injection,inversion-of-control,mef,ioc-container,C#,Dependency Injection,Inversion Of Control,Mef,Ioc Container,下面是我的情景。我试图通过在初始引导期间使用导出功能将类型与接口相关联。然而,MEF抱怨ImportCardinalismatchException。我是MEF的新手,不知道这里出了什么问题?最简单的修复方法是删除继承。然而,我想避免它 public interface IColourService { Color GetColourByCountry(string countryName); } public interface IKnownCo
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(typeof(IColourService))]
然后,您可以通过以下属性声明访问它们:
[ImportMany]
public IEnumerable<IColourService> ColourServices { get; set; }
并添加助手方法以获取特定类型:
public IEnumerable<T> GetServices<T>()
{
return ColourServices.OfType<T>().ToList();
}
希望这有帮助……您的问题可能是您有三个有效的IColorService对象,而MEF希望只找到一个。我希望通过使用命名导入来解决这个问题。如果我强烈认为这是问题所在,这将是一个答案。@Magus将检查命名导入。