为ASP.NET MVC创建一个基于Unity的ControllerFactory
谈到IoC和ASP.NET的集成,很多人会先后想到Ninject,不过我们个人还是倾向于Unity。这篇文章简单地介绍如果创建基于Unity的ControllerFactory。如下面的代码所示,我们通过直接继承DefaultControllerFactory创建一个自定的UnityControllerFactory。构造函数指定的是配置的UnityContainer的名称,如果没有显式指定则采用默认的UnityContainer。在重写的GetControllerInstance方法中,直接调用IUnityContainer的Resolve方法根据Controller类型创建相应的对象。[源代码从这里下载]
1: public class UnityControllerFactory: DefaultControllerFactory
10: throw new ConfigurationErrorsException("Cannot find unity configuration section");
23: protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
为了演示DefaultControllerFactory的作用,我们来创建一个简单的例子。假设我们要创建一个维护联系人的应用,我们通过具有如下定义的Contact类型表示联系人,而IContactRepository接口定义了一个从存储中获取所有联系人的GetAllContacts方法,DefaultContactRepository是对IContactRepository接口的实现。
我们在Web应用的主页显示联系人列表,为此我创建了如下一个HomeController。在这里我们演示的是构造器注入,所以我们通过构造函数指定的IContactRepository对象来初始化Repository属性。在Action方法Index中调用IContactRepository的GetAllContacts方法为对应的View指定Model。
Index.cshtml代码如下所示,这是一个Model类型为IEnumerable Contact 的View,它将所有的联系人信息列出来。
自定义的UnityContainerFactory的注册定义在Gloable.asax中。初次之外,额外需要做的是忽略掉针对favicon.ico的路由,否则程序运行将会失败。
3: public static void RegisterGlobalFilters(GlobalFilterCollection filters)
13: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
23: ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory());
接口IContactRepository和DefualtContactRepository之间的映射关系定义在如下所示的 unity 配置中。
2: alias alias="IContactRepository" type="Artech.Web.Mvc.Extensions.IContactRepository, UnityIntegration" /
3: alias alias="DefaultContactRepository" type="Artech.Web.Mvc.Extensions.DefaultContactRepository, UnityIntegration" /
通过浏览器访问Web应用的主页,将会得到如下所示的联系人列表。
作者:蒋金楠微信公众账号:大内老A
微博:www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 原文链接
基于Asp.Net Mvc开发的个人博客系统 一个基于Mvc 5构建的简单、代码层级分明的开源个人博客系统。前端美观大气、后台采用RightControl .NET通用角色权限系统,开发简单、效率高。网站配置采用XML配置,灵活可以根据自己是需求进行个性化配置。系统功能完备,完全可以满足需求,基本不用二次开发,非常使用程序员的个人博客。
相关文章
- 【转】asp.net 下的中文分词检索工具 - jieba.net
- Asp.Net_EF Code Frist 执行 nuget命令
- ASP.NET MVC下使用AngularJs语言(八):显示html
- ASP.NET MVC下使用AngularJs语言(五):ng-selected
- 没有什么,开发ASP.NET时随便写写,想到什么写什么
- ASP.NET MVC应用程序把文字写在图片上
- ASP.NET MVC验证码演示
- 在ASP.NET MVC应用程序中随机获取一个字符串
- Best Practices for ASP.NET MVC
- 16、ASP.NET MVC入门到精通——MVC过滤器
- 8、ASP.NET MVC入门到精通——View(视图)
- ASP.NET MVC和Web API中的Angular2 - 第1部分
- ASP.NET CheckBoxList Operations with jQuery
- 如何在ASP.NET中用C#将XML转换成JSON
- Kestrel web server implementation in ASP.NET Core
- net软件工程师求职简历
- Asp.net core 学习笔记 QR code and Barcode
- Asp.net core 学习笔记 ( Identity 之 Authentication )
- ASP.NET#在设计窗口上添加了一个SqlDataSource控件后,没有显示出来?
- Docker & ASP.NET Core 教程
- asp.net 服务器端缓存与客户端缓存 [转]
- ASP.NET Core 框架源码地址
- ASP.NET MVC Model绑定(四)
- ASP.NET MVC 路由(四)
- ASP.NET Core(C#) 使用RSACryptoServiceProvider实现公钥和私钥加解密工具类
- ASP.NET MVC的Razor引擎:RazorView
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor
- asp.net 可视化操作(一)——asp.net安装与使用
- 2019-8-31-ASP.NET-Core-开启后台任务