如何在MEF容器中导出部件的现有实例。如果我有在容器中组成的类A,我需要在我的代码中的某些地方获得实例,如果我调用GetExortedValue(),那么如果类A与creatationpolicy签署。NonShared,然后它将再次实例化,我需要当前的。
显然,在容器上调用GetExportedValue<T>
可能导致生成T
的新实例(取决于该部分使用的CreationPolicy
),但是有一个调用GetExport<T>
的选项,它将返回一个Lazy<T>
实例。这是生成的单数部分,并且只生成一次:
var part = container.GetExport<IMyInterface>();
在上面的例子中,part
将是Lazy<IMyInterface>
的一个实例,所以当您第一次访问part.Value
时,Lazy<IMyInterface>
中的委托绑定回调到容器来创建和组合IMyInterface
实例并返回。后续对part.Value
的调用将始终返回相同的实例。