ASP.NET MVC插件技术
在实际开发中,经常会出现需要“临时”调整业务逻辑的情型, 比如某电子商务网站在双十一时价格特别优惠,双十一后恢复原价。这种不同的商品价格计算方法,就适合于以插件实现。
自.NET 4.0起, Managed Extensibility Framework(简称MEF)成为了.NET Framework中的有机组成部分,它支持程序在运行时动态组合装配各种部件。使用它,我们可以实现:不停止Web网站在线实时更新系统。
我写了一个Demo,展示实现上述功能需求所涉及到的基本技术。
示例解决方案的启动项目是一个ASP.NET MVC4项目,其运行网页截图如下:
图1
图2
这个项目的特点是:
(1)在更新系统时无需停机,一上传,新组件立即生效
(2)通过给要使用的组件指定一个更高的版本号,系统将自动并装载它
(3)所有操作均通过Web完成,无需使用FTP等其他工具跨网络传输文件。
(4)组件文件名无关紧要,在本例中,如果上传的新组件与老组件文件名相同,将不会保存新组件。
放在CSDN的资源包中除了源代码(VS2013格式),还有一个17页的PDF文档,介绍更详细的内容。
这个项目用到MEF,详细介绍它不是一篇短短的博文所能做到的。但你要是不懂MEF,则无法掌握这里所谈到的技术。请自行找寻相关资料学习MEF,我在《.NET 4.0面向对象编程漫谈(应用篇)》中有一章专门讲述MEF,可供参考。
注:此书己被互联网“雷锋”扫描共享,作为作者,我只能无奈地笑笑
。
毕竟知识共享才能创造价值,
只希望我写的这些书能真的帮助大家学好用好技术,
那我付出的劳动也算值回票价了,
也算得到了一点心理安慰
……
最后,再谈谈MEF与NInject等IoC容器使用场景:
在ASP.NET MVC项目中,IoC容器主要用于向Controller动态地注入业务逻辑层(或服务层)的组件,另外,如果数据存取层中应用了Repository模式设计了若干Repository,则也可以将其动态注入到上层的组件中,向上层组件提供CRUD数据服务。
MEF的使用场景则不一样,它比较适合在中间层使用,用于动态地更新或扩充系统业务逻辑功能,比较适合于业务流程的 微调 ,实现整个系统的插件化。
本文如有错漏
,欢迎高手指正。谢谢。
====================================