【问题标题】:MEF: Where should I put the CompositionContainer?MEF:我应该把 CompositionContainer 放在哪里?
【发布时间】:2010-12-24 22:30:10
【问题描述】:

我一直在为我的基于 Web 的应用程序使用 Windsor IoC 容器,以解决应用程序应使用的数据访问层实现。

Web 应用程序的 UI 将由页面组成,每个页面由称为 portlet 的小单元组成。 (它们的概念有点类似于小部件。)这些所谓的 portlet 基本上是 Web 控件,可以在运行时为每个页面单独配置。

该应用程序将附带其中一些内置功能,但我希望能够轻松扩展它。

我发现这个机制正是 MEF 的用途。所以我决定以这样一种方式实现系统,即它使用 MEF 发现 portlet。然后,我意识到它也可以做我目前使用 Windsor 的用途,所以我决定放弃 Windsor,转而使用 MEF。

显然,我将不得不使用 DirectoryCatalog,它会扫描应用程序 bin 文件夹中的 .dll 并返回我需要的所有内容。

我还阅读了 StackOverflow 中有关 MEF 的一些教程、示例和所有问题。我认为使用 MEF 的最简单方法是通过 Glenn Block 在他的教程中提到的 PartInitializer,但我意识到它不在 MEF 中。实际上,它在我从 CodePlex 下载的代码中,但在一个单独的程序集中,而且只有源代码,而不是二进制形式。 (这是否意味着它不是 MEF 的一部分?或者将它放到一个单独的项目中有什么意义?) 然后,我意识到它是针对 Silverlight 的,所以它并没有真正帮助我。 (或者我应该只针对 .NET 3.5 编译它,还是将它包含在我的项目中,然后我就可以开始了?)

所以现在我遇到了以下问题:我应该将 CompositionContainer 放在我的应用程序的什么位置?

我还想考虑另一件事:我应该在应用程序的生命周期中只使用一个 CompositionContainer,还是每次需要时都创建一个容器更好?

【问题讨论】:

    标签: c# .net ioc-container mef


    【解决方案1】:

    好问题。

    一般来说,关于将容器放在哪里的问题,我推荐以下帖子:http://blogs.msdn.com/nblumhardt/archive/tags/Container+Managed+Application+Design/default.aspx

    在 Web 上的 MEF 中,由于请求/响应性质和可扩展性问题,基于 Web 的应用程序有点棘手。对于 web,您可能希望有一个容器层次结构,一个用于共享应用程序的根容器,以及每个请求的子容器。为了节省资源,子容器应该随着请求而生死。共享容器包含所有调用者共享的服务。

    您可以查看这些文章以更深入地了解如何执行此操作:

    http://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx http://blogs.msdn.com/hammett/archive/2009/07/15/mef-and-asp-net-mvc-sample-updated.aspx http://mef.codeplex.com/wikipage?title=Parts%20Lifetime&referringTitle=Guide

    就 PartInitializer 而言,我会避免使用类似的东西,除非你必须这样做。 ASP.NET 通过 HTTP 处理程序、模块等在管道中提供了足够的钩子,以便在创建时自动组合。

    我在网络上看到的唯一使用 PI 的地方可能是在自定义用户控件中。 PI 作为 Silverlight 4 的一部分提供,在 .NET 4.0 的包装盒中不可用。我为 .NET 4.0 创建了一个可用版本,您可以在此处找到:http://cid-f8b2fd72406fb218.skydrive.live.com/self.aspx/blog/Composition.Initialization.Desktop.zip

    HTH 格伦

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2016-08-25
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2016-12-21
      • 2015-02-08
      相关资源
      最近更新 更多