我正在开发一个支持MEF的应用程序。有一个核心库项目作为粘合剂并实现:
CompositionContainer cc = new CompositionContainer(catalog);
cc.ComposeParts(this);
我已在此核心库中声明了所有[Import]部分,如下所示:
[Import(typeof(IHost))]
// The imported host form
public IHost Host
{ get; set; }
[Import(typeof(ILightStudents<?>))]
public ILightStudents<?> StudentsAPI { get; set; }
在其他具有[export]属性的库项目中实现IHost或其他接口存在问题,但问题是我已经声明了ILightStudents:
public interface ILightStudents<T> where T:class
{
IEnumerable<T> Students();
T GetStudent(long id);
}
但正如您在之前的代码中看到的那样,我把'?'导入部分标记。如您所知,泛型方法的目的是您可以通过您想要的类或类型来实现它们。在这里,我想用其正确的类型在其他库项目中实现ILightStudents,但我不能保留[import]部分而不指定类型。
请你帮帮我吗?
被修改:
我几乎可以通过使用动态类型绑定来解决问题。
答案 0 :(得分:2)
使用:
此功能已添加到两者中 - 它将包含在.NET 4.5中。
答案 1 :(得分:2)
我几天前从另一个帖子中复制了答案:
尝试
[Export(typeof(IService<>))]
要从typeof运算符获取泛型类型定义,请省略类型参数。对于具有多个类型参数的类型,请使用逗号表示该类型的“arity”。例如:
typeof(List<>) // not: typeof(List<T>)
typeof(IDictionary<,>) // not: typeof(IDictionary<K, V>)