asp.net-mvc – 组合ASP.NET MVC Web应用程序的最佳实践(MEF,Areas,DI)

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 组合ASP.NET MVC Web应用程序的最佳实践(MEF,Areas,DI)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在弄清楚如何重组现有的非常模块化的ASP.NET MVC 3.0应用程序的架构.我有一个像结构的插件,以使现有的项目可扩展.

搜索了不同的策略来制作模块化的Web应用程序,并找到以下内容.我想让你对这些想法发表评论.

>单独项目中的MVC区域

对于每个插件,我想创建一个单独的ASP.NET MVC项目,其中包含控件,视图和视图模型的插件. “员工”模块将包含一个要列出,创建,更新和删除员工的区域.然而,这听起来不错,需要将AreaRegistration放置在“bin”目录中的所有区域.我找到一个方法将我的区域项目直接放在区域文件夹中,并从“/ Areas / [AreaName] / bin”文件夹解析区域程序集:

BuildManager.AddReferencedAssembly.Add(Assembly.LoadFrom(…));
AppDomain.CurrentDomain.AssemblyResolve += ResolveAssemblies;

这是非常好的工作,并允许我在主项目的区域文件夹中部署插件.我喜欢我正在使用由ASP.NET MVC开箱即用的区​​域功能.

> MVC便携式区域(MVCContrib)

http://elegantcode.com/2012/04/06/mvc-portable-areas/

便携式区域似乎不是一个好办法,因为它们要求将视图编译为“区域”项目文件中的嵌入式资源.这将阻止IIS缓存.另一方面,我真的不能想象性能缺点真的是多大.

>使用MEF的基于MVC的模块

http://www.fidelitydesign.net/?p=104

为了在其他项目中创建松散耦合的服务,我非常依赖MEF.因此,我认为使用它来发现ASP.NET MVC模块/插件是一个好主意.我将最终使用ControllerFactory来实例化通过使用“导出”属性导出的控制器.这样我就可以完全控制插件实例化,并可以使用MEF来获取服务.然而使用MEF确实需要比使用MVC区域更多的工作,MVC区域解决了控制器的开箱即用.

>跨插件项目的实体框架

一个问题,到目前为止我无法解决,是如何在各个插件项目中分发实体的.目前我们使用Database First方法,它包含一个包含所有实体的* .edmx模型文件.即使使用DbContext或Code First,也不可能为一个数据库使用多个DbContext类.一个想法是使用MEF将不同插件的实体加载到中央DbContext类中.不过我不知道这是否是支持和/或推荐的设置.

解决方法

另一个选择是使用我的Griffin.MvcContrib.它为您照管所有管道,并允许您编写视图并使用少量代码更改的区域.

与IoC容器一起使用以获得强大的插件系统.

这是一篇文章,演示如何:http://www.codeproject.com/Articles/386674/ASP-NET-MVC-3-plug-in-architecture-using-Griffin-M

原文链接:https://www.f2er.com/aspnet/246657.html

猜你在找的asp.Net相关文章