代码之家  ›  专栏  ›  技术社区  ›  John Leidegren

线程安全和MEF复合容器

mef
  •  4
  • John Leidegren  · 技术社区  · 14 年前

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

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

    我还考虑了混合方法,在这种方法中,我可以使用一个线程安全的静态复合容器和一个绑定到每个请求的容器。

    除了线程安全性这一论点,我还严重依赖于exportfactory,以便能够根据需要构造对象。尽管如此,我仍然被exportLifeTimeContext这件事困扰着,我不确定这种方法的资源需求。

    有人对此有什么见解吗?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Daniel Plaisted    14 年前

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

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

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