MEF:我应该把CompositionContainer放在哪里?我一直在将WindsorIoCContainer用于基于Web的应用程序,以解决应用程序应使用的数据访问层实现问题。Web应用程序的UI将由页面组成,每个页面由称为portlet的小单元组成。(它们的概念有点类似于小部件。)这些所谓的portlet基本上是可以在运行时为每个页面静态配置的Web控件。该应用程序将附带一些内置功能,但我希望能够轻松扩展它。我发现这种机制正是MEF的构建方式。因此,我决定以使用MEF发现portlet的方式实施该系统。然后,我意识到它也可以做我目前正在使用的Windsor,所以我决定放弃Windsor而不是MEF。显然,我将不得不使用DirectoryCatalog,它会扫描应用程序的bin文件夹中的.dll并返回我需要的所有内容。我在StackOverflow中阅读了一些教程、示例和所有关于MEF的问题。我认为使用MEF的最简单方法是通过GlennBlock在他的教程中提到的PartInitializer,但我意识到它不在MEF中。实际上,这是我从CodePlex下载的代码,但在一个单独的程序集中,而且只是源代码,而不是二进制形式。(这是否意味着它不是MEF的一部分?或者将它放入一个单独的项目中有什么意义吗?)然后,我意识到它是针对Silverlight的,所以它并没有真正帮助我。(或者我应该只为.NET3.5编译它,还是将它包含在我的项目中,这样我就可以开始了?)所以现在我遇到了以下问题:我应该将CompositionContainer放在我的应用程序中吗?我还想考虑一件事:我应该在应用程序的生命周期内只使用一个CompositionContainer,还是每次需要时都创建一个容器更好?好问题。一般来说,关于容器放在哪里的问题,我推荐下面的帖子:http://blogs.msdn.com/nblumhardt/archive/tags/Container+Managed+Application+Design/default.aspxinMEFontheweb,由于请求/响应性质和可扩展性问题,基于Web的应用程序有些微不足道。对于网络,您可能希望有一个容器层次结构、一个用于共享的应用程序根以及每个请求的子容器。子容器应该根据请求生存和死亡以节省资源。共享容器包含所有调用者共享的服务。您可以查看这些文章以更深入地了解如何执行此操作:http://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspxhttp://blogs.msdn.com/hammett/archive/2009/07/15/mef-and-asp-net-mvc-sample-updated.aspxhttp://mef.codeplex.com/wikipage?title=Parts%20Lifetime&referringTitle=Guide至于PartInitializer,除非万不得已,否则我会避免使用类似的东西。ASP.NET通过HTTP处理程序、模块等在管道中提供足够的挂钩,以便在构建时自动编写。可能我唯一在线使用PI的地方是自定义用户控件。PI作为Silverlight4的一部分发布,不能随.NET4.0开箱即用。我已经为.NET4.0创建了一个工作版本,您可以在这里找到它:http://cid-f8b2fd72406fb218.skydrive.live.com/self.aspx/blog/Composition.Initialization.Desktop.zip上面的HTHGlenn这是C#学习教程:MEF:我应该把CompositionContainer放在哪里?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
