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

发布于 2024-12-07 14:53:35 字数 163 浏览 1 评论 0原文

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

提前致谢 ...

How I can the existing instance of an exported part in MEF container . If I have class A which was composed in the container , I need in some places in my code to get the instance , if I call GetExortedValue() , then if class A signed with CreationPolicy.NonShared , then it'll be instantiated again and I need the current one .

Thanks in advance ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寂寞笑我太脆弱 2024-12-14 14:53:35

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

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

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

Obviously calling GetExportedValue<T> on your container could result on the generation of a new instance of T (depending on the CreationPolicy used for the part), but there is an option to call GetExport<T> which will return you a Lazy<T> instance. This is the singular part that is generated and only generated the once:

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

In the above example, part would be an instance of Lazy<IMyInterface>, so when you first access part.Value, the delegate bound in the Lazy<IMyInterface> calls back to the container to create and compose the IMyInterface instance and is returned. Subsequent calls to part.Value will always return this same instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文