搞定.NET MVC IOC控制反转,依赖注入
一直听说IOC,但是一直没接触过,只看例子好像很高达上的样子,今天抽了点时间实现了下,当然也是借助博客园里面很多前辈的文章来搞的!现在做个笔记,防止自己以后忘记! 1、首先创建MVC项目 2、然后新建一个接口IServiceA public interface IServiceA { string Name(); } 实现接口 public class ServiceA : IServiceA { public string Name() { return "Service A"; } } 简单点说,就是要把IService的调用自动注入ServiceA类型 新建MVC控制器:HomeController并添加构造函数 public class HomeController : Controller { protected Service.IServiceA ServiceA; public HomeController(Service.IServiceA a) { this.ServiceA = a; } } 下面我们来实现如何通过IOC把IServiceA注入为ServiceA类型 Nuget添加引用,搜索Unity,如果提示失败的话,就用Nuget的命令添加以前的版本,不知道怎么敲就直接添加PolicyInJection引用好了 新建类:UnityDependencyReslover public class UnityDependencyReslover : System.Web.Mvc.IDependencyResolver 这个没有啥好说的把,就是实现类型映射的解析而已 Global.asax的Application_Start中注册解析类型映射 IUnityContainer container = new UnityContainer(); 看标红的那句,这里简单说明一下,HomeController的构造函数带了参数,默认情况下MVC的控制器初始化没有参数的,这里我们要自己去实现对参数的解析,也就是在这个地方注入参数,不然你的MVC控制器无法访问 新建:MyControllerFactory继承System.Web.Mvc.DefaultControllerFactory protected override IControllerGetControllerInstance(RequestContext requestContext,Type controllerType) {
这样就行啦! 在你的MVC的HomeController里面添加一个Action访问下IServiceA的Name方法试试,是不是可以了! 这里我要说明一下,有几个地方要注意:那个IUnityContainer要统一,先前我尝试过一直不成功,后来发现是有的地方用的是UnityContainer,所以还是要认真一点! 添加代码,代码无法高亮加粗,所以没用代码形式添加! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |