从MEF容器中获取导出的零件实例

时间:2011-10-02 07:11:17

标签: mef

如何在MEF容器中导出部件的现有实例。如果我有一个在容器中组成的A类,我需要在我的代码中的某些地方获取实例,如果我调用GetExortedValue(),那么如果A类用CreationPolicy.NonShared签名,那么它将再次被实例化,我需要现在的那个。

提前致谢...

1 个答案:

答案 0 :(得分:2)

显然,在您的容器上调用GetExportedValue<T>可能会导致生成T的新实例(取决于部件使用的CreationPolicy),但可以选择调用GetExport<T>将返回Lazy<T>个实例。这是生成的单数部分,仅生成一次:

var part = container.GetExport<IMyInterface>();

在上面的示例中,part将是Lazy<IMyInterface>的实例,因此当您第一次访问part.Value时,Lazy<IMyInterface>中绑定的委托会回调容器创建和组合IMyInterface实例并返回。对part.Value的后续调用将始终返回此相同的实例。