您如何使用托管扩展框架?


10

我已经与MEF合作约2周。我开始考虑MEF的用途,进行研究以了解如何使用MEF,并最终实现具有3个模块的主机。事实证明,合同易于掌握,模块易于管理。

尽管MEF有非常实际的用途,但我想知道在多大程度上?我的意思是,每个人都将重写现有应用程序以实现可扩展性吗?

是的,听起来很疯狂,而且不切实际。夸张地说:

  • MEF如何影响当前的编程趋势?

  • 您是否开始寻找使用MEF的机会?

  • 您是否已开始计划对可能受益于可扩展性的现有应用进行重大重写?

就是说,我的问题是:
我怎么知道什么时候应该计划一个具有可扩展性的新项目?
我如何知道现有项目是否需要重写才能实现可扩展性?

有人在使用MEF吗?

Answers:


8

有人在使用MEF吗?

我正在使用MVVM模式进行Silverlight项目。我们首先通过接口和手动依赖项注入(根据需要使用构造函数或属性注入)将所有VM相互连接在一起。它开始变得痛苦,并且我们开始使用MEF基本上是一个依赖项注入框架,以导出跨视图模型使用的某些服务,并将它们导入需要它们的视图模型。只需很少的代码即可完美运行。

是的,那里有一些纯粹主义者会说MEF不打算用于依赖关系注入,而真正的依赖关系注入框架会做得更好。但是,MEF可以直接嵌入到.NET中,这是一个很大的优势,它足以满足我们的需求。

我怎么知道什么时候应该计划一个具有可扩展性的新项目?我如何知道现有项目是否需要重写才能实现可扩展性?

IMO,您应该始终适当地分离关注点,并使用接口来允许不同模块的独立更改。如果您做对了,那么当您发现需要扩展性时,应该很容易添加MEF。但是,我不会启动一个没有扩展性要求的项目,以防万一。我将等待有需要。对于现有项目,如果有需要,我将评估重新布线该项目以使用MEF而不是替代解决方案而不是什么都不做的努力,然后看看哪个胜出。


6

人们犯的错误,我认为是由于命名(托管可扩展性框架)是在假设MEF仅对可扩展性可行。MEF实际上解决了三个关键问题:可扩展性,发现和元数据。即使对于永远不会看到单个插件或扩展的应用程序,后两个功能也非常强大。

这是我写的一篇有关作为IOC容器的发现功能的文章:http : //www.informit.com/articles/article.aspx? p= 1635818

我在大多数企业业务应用程序中使用MEF,因为它使在Silverlight中构建和维护模块化应用程序更快,更轻松。


我读过您的文章-至少两次;)
IAbstract

4

目前,我在一些合并了Repository模式的项目中使用MEF。

一个正在单元测试中使用不同的存储库类型,另一个项目正在使用本地(直接到DB),远程(WCF)和测试存储库。

这两个项目都可以通过代码或配置来更改其存储库类型,并且基于MEF元数据/惰性类型。

迄今为止,两个项目的运行情况都非常好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.