【问题标题】:Thread safety and the MEF CompositionContainer线程安全和 MEF CompositionContainer
【发布时间】:2010-07-14 13:30:16
【问题描述】:

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

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

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

除了线程安全参数之外,我还严重依赖 ExportFactory 能够根据需要构造对象。不过,我仍然被 ExportLifeTimeContext 这个东西困扰,我不确定这种方法的资源需求。

有人对此有所了解吗?

【问题讨论】:

    标签: mef


    【解决方案1】:

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

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

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

    【讨论】:

    • 这样就解决了,目录只在启动时构建一次。没有重组。每个请求我都会有一个不同的容器来处理它。应该管用。谢谢!
    • 它在哪里说目录是线程安全的?我似乎没有发现记录
    • @jws_ 请参阅 MSDN 文档中的备注部分,例如 ComposablePartCatalog:msdn.microsoft.com/en-us/library/…
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多