仓酷云

标题: ASP.NET教程之Unity+MVC:完成IDependencyResolver接口必要注重的中央仓酷云 [打印本页]

作者: 不帅    时间: 2015-1-18 11:21
标题: ASP.NET教程之Unity+MVC:完成IDependencyResolver接口必要注重的中央仓酷云
对于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
复制代码
ASP.NET教程之Unity+MVC:完成IDependencyResolver接口必要注重的中央仓酷云
登录/注册后可看大图

<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网页编程是公开了。
作者: 蒙在股里    时间: 2015-1-20 21:44
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者: 爱飞    时间: 2015-1-30 05:48
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
作者: 飘灵儿    时间: 2015-2-4 06:06
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
作者: 冷月葬花魂    时间: 2015-2-9 17:03
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
作者: 因胸联盟    时间: 2015-2-16 16:43
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 分手快乐    时间: 2015-3-5 06:57
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
作者: 愤怒的大鸟    时间: 2015-3-11 23:51
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
作者: 再见西城    时间: 2015-3-19 16:31
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
作者: 飘飘悠悠    时间: 2015-3-28 21:30
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2