线程安全和MEF CompositionContainer

Joh*_*ren 4 mef

我打算在ASP.NET中使用MEF,以寻找对CompositionContainer的线程安全性的一些了解.

我的第一种方法是将一个独特的CompositionContainer与每个请求相关联,但我担心这会很昂贵并且不能很好地扩展,另一方面,CompositionContainer通过构造函数中的简单标志支持线程安全操作.

我也考虑过混合方法,我可以使用一个线程安全的静态CompositionContainer和一个绑定到每个请求的方法.

除了线程安全参数之外,我在很大程度上依赖于ExportFactory来根据需要构建对象.虽然,我仍然被这个ExportLifeTimeContext事物窃听,但我不确定这种方法的资源需求.

有人对此有所了解吗?

Dan*_*ted 5

创建CompositionContainers很便宜,因此为每个请求创建一个应该没问题.创建目录并不便宜,但目录是线程安全的,因此您应该能够在启动时创建全局目录并将其用于每个请求.

需要注意的一点是,即使是"线程安全的"组合容器对于可能导致重构的操作(例如更改目录或调用容器上的Compose方法)也不是线程安全的.

至于混合方法,如果你想要在请求和你想要特定于请求的某些部分之间共享一些部分(应该是线程安全的),你就会走这条路.在这种情况下,只需要将共享容器创建为线程安全的.

  • @jws_见例如ComposablePartCatalog MSDN文档中的备注部分:http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.primitives.composablepartcatalog(v=vs.110).aspx (2认同)