仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1485|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET教程之Unity+MVC:完成IDependencyResolver接口必要注重的中央仓酷云

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:21:54 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于new隐藏成员的作用,往往是出于使用了一个第三方类库,而你又无法获得这个类库的源代码,当你继承这个类库的某个类时,你需要重新实现其中的一个方法,而又需要与父类中的函数使用同样的函数,这是就需要在自定义的子类中把那个同名函数(或成员)加上new标记,从而隐藏父类中同名的成员。ASP.NETMVC3供应了IDependencyResolver接口,完成该接口,并分离响应的“依附注进容器”(好比:Unity)能够便利地对Controller举行依附注进。
本文以Unity为例,申明一下完成IDependencyResolver接口必要注重的中央。
先看一下我们利用的完成代码:
  1. namespaceCNBlogs.Infrastructure.CrossCutting.IoC{publicclassIoCDependencyResolver:IDependencyResolver{#regionMemebersprivateIContainer_currentContainter;#endregion#regionConstructorspublicIoCDependencyResolver(IContainercontainer){_currentContainter=container;}#endregion#regionIDependencyResolverMemberspublicobjectGetService(TypeserviceType){return_currentContainter.Resolve(serviceType);}publicIEnumerable<object>GetServices(TypeserviceType){return_currentContainter.ResolveAll(serviceType);}#endregion}}
复制代码
如许完成后,会见时呈现上面的毛病:
  1. Thecurrenttype,System.Web.Mvc.IControllerFactory,isaninterfaceandcannotbeconstructed.Areyoumissingatypemapping
复制代码

<br>
从这个毛病能够剖析出,ASP.NETMVC试图经由过程Unity剖析IControllerFactory的完成,但我们在代码中并没有注册IControllerFactory的完成。
因而,我们手动注册一下,代码以下:
  1. _currentContainer.RegisterType<IControllerFactory,DefaultControllerFactory>();
复制代码
之前的毛病消散了,却呈现了新的毛病:
  1. Thecurrenttype,System.Web.Mvc.IControllerActivator,isaninterfaceandcannotbeconstructed.Areyoumissingatypemapping?
复制代码
又找不到别的一个接口(IControllerActivator)的完成,岂非要手工一个一个注册?
看来这不是办理之道,必要另辟捷径...
在codeplex中发明了Unity.MVC3(也是经由过程Unity完成ASP.NETMVCContorller的依附注进),进修了一下它的代码,发明懂得决之道。
本来只需在IDependencyResolver.GetService(TypeserviceType)的完成中,判别一下serviceType是不是被注册,假如没有被注册,就前往null。ASP.NETMVC失掉null前往值,会本人剖析这个接口,如许成绩就办理了,代码以下:
  1. publicobjectGetService(TypeserviceType){if(!_currentContainter.IsRegistered(serviceType)){returnnull;}return_currentContainter.Resolve(serviceType);}
复制代码
来自:http://www.ckuyun.com/dudu/archive/2011/06/09/unity_mvc_idependencyresolver.html
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而net网页编程是公开了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 08:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表