2009-06-16 59 views
4

是否可以标记要导出的界面,以便所有派生类都可以导入?MEF:出口标记界面

[Export(typeof(IMyInterface))] 
public interface IMyInterface { ... } 

[Import(typeof(IMyInterface))] 
private readonly ICollection<IMyInterface> m_Concretes = new Collection<IPlugin>(); 

我不知道在这个例子中哪些类正在实现IMyInterface。这些类本身不知道关于MEF的任何信息 - 并且不使用[Export]属性。

只要我不用[Export]标记每一个班级,它似乎并不适用于我。

回答

4

在当前预览中,您可以尝试在接口上添加[PartExportsInherited]属性(以及Export属性)。不过,我不确定这是否适用于接口。

我们计划添加对出口接口的支持。

+0

感谢 - 它的工作原理上的接口了。 – tanascius 2009-06-16 14:34:36

3

是的,在codeplex的当前预览中,您可以用PartExportsInherited和Export标记接口以获取所有实现者自动导出。在即将推出的预览版本中,我们可能会简化它,只需放置一个属性,可能类似[InheritedExport]。

编辑:使用MEF预览6现在可以通过在接口上放置InheritedExport属性来完成此操作。

+0

有没有办法通过属性来做到这一点? I.E. [InheritedExport] 公共类猫:属性 { } [猫] 公共类露丝{ } ......... [ImportMany(CAT)] IEnumerable 猫; //猫将包含“露丝” – Mike 2010-04-21 21:13:53

2

更新:使用MEF v4。

[InheritedExport(typeof(IMyInterface))] 
public interface IMyInterface 
{ 
} 

正如所料,从IMyInterface继承的任何内容都将导出为一个。

使用[ImportMany]将它们全部注入:

[ImportingConstructor] 
public void MyClass([ImportMany] IEnumerable<IMyInterface> myDerivedObjects)