在对MEF进行一些研究之后,我遇到了根据MSDN的 CreationPolicy.Shared 属性:
指定关联的单个共享实例 ComposablePart将由CompositionContainer创建并共享 所有请求者。
听起来不错,只要我始终确保只有一个容器可以访问我使用此策略导出的类。那么我该如何确保只有一个容器可以访问我的导出类型呢?这是我的情景:
我有一个Windows服务,需要使用类似单一类的内存数据。数据是非持久性的,所以我希望每当服务启动时都会重新创建它,但是一旦服务停止它就没有用处。我的服务中的多个线程需要以线程安全的方式读取和写入此对象,因此我的初始计划是继承ConcurrentDictionary以确保对其进行线程安全操作。
将要攻击这个类的线程都是从一个抽象基类继承的,所以有没有办法让这个类(只有这个类)从MEF中导入它并按照我想要的方式工作? / p>
感谢你提供的任何提示,我对MEF很新,所以我还在学习这些细节
答案 0 :(得分:1)
如果绝对必须是不同容器中的单例,则可以使用私有构造函数并公开静态Instance
属性,就好像它是一个“经典”的非容器管理单例。然后在组合根目录中,使用ComposeExportedValue将其注册到容器:
container.ComposeExportedValue(MySingleton.Instance);
答案 1 :(得分:0)
您可以随时使用Lazy类型,因为它会阻止其他线程,如本博文中所述:http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/19/c-system.lazylttgt-and-the-singleton-design-pattern.aspx