我一直在为基于Web的应用程序使用Windsor IoC容器,以解决应用程序应使用的数据访问层实现。
Web应用程序的UI将由页面组成,每个页面由称为portlets的小单元组成。(它们的概念有些类似小部件。)这些所谓的portlets基本上是Web控件,可以在运行时为每个页面单独配置。
该应用程序将内置一些这些portlets,但我希望能够轻松扩展它。
我发现这种机制正是MEF构建的目的。因此,我决定以这样的方式实现系统,即使用MEF发现portlets。然后,我意识到它还可以做我目前使用Windsor的事情,所以我决定放弃Windsor,转而使用MEF。
显然,我将不得不使用DirectoryCatalog,它扫描应用程序bin文件夹中的.dll,并返回我需要的所有内容。
我阅读了一些教程、示例和StackOverflow中关于MEF的所有问题。我发现使用PartInitializer是通过Glenn Block在他的教程中提到的最简单的方法,但我意识到它并不在MEF中。实际上,它在我从CodePlex下载的代码中,在一个单独的程序集中,并且只在源代码中,而不是二进制形式中。(这是不是意味着它不是MEF的一部分?或者将其放到一个单独的项目中有什么意义?)然后,我意识到它是为Silverlight设计的,所以它并没有真正帮助我。(或者我应该针对.NET 3.5编译它,或者将其包含在我的项目中,然后就可以开始了吗?)
现在,我遇到了以下问题:我应该在我的应用程序中将CompositionContainer放在哪里?
还有一件事我想考虑:我应该在应用程序的整个生命周期中只使用一个CompositionContainer,还是每次需要时都创建一个容器会更好?