mef - 线程安全和 MEF CompositionContainer

标签 mef

我计划在 ASP.NET 中使用 MEF,以深入了解 CompositionContainer 的线程安全性。

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

我还考虑了混合方法,我可能会使用线程安全的静态 CompositionContainer 和一个与每个请求相关联的方法。

除了线程安全参数,我非常依赖 ExportFactory 来根据需要构造对象。尽管如此,我仍然被这个 ExportLifeTimeContext 事情困扰,我不确定这种方法的资源需求。

有人对此有所了解吗?

最佳答案

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

需要注意的一件事是,即使是“线程安全”的组合容器对于可能导致重新组合的操作也不是线程安全的,例如更改目录或调用容器上的 Compose 方法。

至于混合方法,如果您希望在请求之间共享某些部分(应该是线程安全的)和希望特定于请求的某些部分,那么您将采用该方法。在这种情况下,只需要将共享容器创建为线程安全的。

关于mef - 线程安全和 MEF CompositionContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246581/

相关文章:

c# - 通过 Windows 服务启动和停止并发线程

c# - 事件源未记录

.net - MEF OSGi 是否适用于 .NET?

c# - MEF创建政策

c# - VS 扩展中具有 [Export] 的 MEF 组件 - 未找到与约束匹配的导出

c# - 使用特定接口(interface)时的 MEF 组合导入问题

.net - MEF 实例化和多线程

c# - MEF:从不同的插件加载插件

ioc-container - MEF 缺少什么才能与 IoC 容器相提并论?

c# - 从仅给定 Type 实例的 MEF 容器中获取导出