如何在MEF容器中导出部件的现有实例。如果我有一个在容器中组成的A类,我需要在我的代码中的某些地方获取实例,如果我调用GetExortedValue(),那么如果A类用CreationPolicy.NonShared签名,那么它将再次被实例化,我需要现在的那个。
提前致谢...
答案 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
的后续调用将始终返回此相同的实例。