【发布时间】:2012-06-15 18:15:59
【问题描述】:
在对 MEF 进行一些研究后,我发现了 CreationPolicy.Shared 属性,根据 MSDN:
指定关联的单个共享实例 ComposablePart 将由 CompositionContainer 创建并共享 由所有请求者。
只要我始终确保只有一个容器访问我使用此策略导出的类,这听起来不错。那么我该如何确保只有一个容器能够访问我导出的类型呢?这是我的场景:
我有一个 Windows 服务需要利用类似单例的类来获取一些内存中的数据。数据是非持久的,所以我希望在服务启动时重新创建它,但一旦服务停止,它就没有任何用处。我的服务中的多个线程需要以线程安全的方式读取和写入此对象,因此我最初的计划是从 ConcurrentDictionary 继承以确保针对它的线程安全操作。
将要利用这个类的线程都继承自一个抽象基类,那么有没有办法让这个类(并且只有这个类)从 MEF 导入它并按照我想要的方式进行这项工作?
感谢您提供的任何提示,我对 MEF 很陌生,所以我仍在学习细节
【问题讨论】:
-
我使用 NInject 和它的“as singleton”模式来实现很好的绑定。请注意保持 MEF 提供的线程安全(无状态或有趣的副作用)。
-
@jonnyGold 谢谢,我之前没有使用过 Ninject...它是搭载在 MEF 上还是它自己独特的 DI 框架?
-
它是它自己的框架。您可以通过 nuget 获取它,并且有针对 MVC 和 WCF 的专业化。我最喜欢的一点是绑定是在代码中声明的,因此您不会犯类型匹配错误。或者一个错字,就此而言。此外,上下文绑定非常强大。
标签: c# multithreading dependency-injection mef extensibility