使用MEF与NHibernate和Castle Windsor

5
我有一个ASP.Net MVC应用程序,它在数据访问方面使用NHibernate。我正在使用Windsor容器来处理每个控制器中注入的ISession引用,这很好用。
现在,我希望通过可插拔的架构扩展我的应用程序,以便我可以拥有核心产品和特定的附加组件。我发现了一篇关于使用MEF进行此操作的好文章。
我的问题是如何使Windsor容器和MEF容器相互协作,以便我可以实现这一点。Glenn Block发表了一篇文章来谈论这个确切的问题。最后他说下一篇文章将向您展示如何做到这一点,但没有第二部分。
有人使用ASP.Net MVC、MEF、NHibernate和Castle Windsor创建过这样的应用程序吗?
3个回答

3

6个月前,我已经完成了温莎(Windsor)和MEF集成的小型原型这里。该原型的目标是您似乎正在实现的场景,即使用Windsor引导应用程序,并希望使用MEF进行可扩展性。您可以查看它,也许它会给您一些想法。


我也喜欢你关于这个的博客文章。 - dbones
所引用的链接已失效,服务器上的robots.txt文件也阻止了其在Wayback机器上被缓存。从唯一名称kkozmic出发,看起来源代码已经迁移到了github,但这是否是正确的代码呢? https://github.com/kkozmic/Castle.Samples.Extensibility - zeristor

3

谁能帮助我 应用程序使用ASP.NET MVC,Castle Windsor和MEF和NHibernate。对于一些想法值得一看。


0

根据您想要实现的目标,可能有多种可行的方法。

如果可能的话,请放弃Windsor并选择MEF。如果您不使用Windsor的更高级功能,则可以轻松地使用MEF代替Windsor。(阅读此文章以查看它是否适合您。

如果您想坚持使用两者,请阅读此文。(也许这是您提到的同一篇文章?)

正如Glenn所写,同时拥有MEF和Windsor是完全合理的。以下是我的想法:

  • Windsor作为应用程序中实际组件的IoC容器
  • MEF应该负责应用程序中的外部组件和第三方扩展

这也应该回答了 Glenn 在他的博客文章末尾提出的问题。(顺便说一下,评论也值得阅读,他说他有一个适用于 Castle 的工作桥梁。)
你还可以在 this question 中找到更多的信息。

希望这能帮到你。


我不会称它们为“高级功能”,实际上它们是任何体面的IoC容器的基本功能。MEF没有许多这些功能,因为它旨在用作IoC容器。 - Mauricio Scheffer
@Mauricio - 是的,你说得对。MEF并不是用来作为IoC容器的,但它可以用于基本的IoC目的。 - Venemo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接