不帅 发表于 2015-1-18 11:21:54

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

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

<br>
从这个毛病能够剖析出,ASP.NETMVC试图经由过程Unity剖析IControllerFactory的完成,但我们在代码中并没有注册IControllerFactory的完成。
因而,我们手动注册一下,代码以下:
_currentContainer.RegisterType<IControllerFactory,DefaultControllerFactory>();之前的毛病消散了,却呈现了新的毛病:
Thecurrenttype,System.Web.Mvc.IControllerActivator,isaninterfaceandcannotbeconstructed.Areyoumissingatypemapping?又找不到别的一个接口(IControllerActivator)的完成,岂非要手工一个一个注册?
看来这不是办理之道,必要另辟捷径...
在codeplex中发明了Unity.MVC3(也是经由过程Unity完成ASP.NETMVCContorller的依附注进),进修了一下它的代码,发明懂得决之道。
本来只需在IDependencyResolver.GetService(TypeserviceType)的完成中,判别一下serviceType是不是被注册,假如没有被注册,就前往null。ASP.NETMVC失掉null前往值,会本人剖析这个接口,如许成绩就办理了,代码以下:

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:35

通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。

爱飞 发表于 2015-1-30 05:48:04

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

飘灵儿 发表于 2015-2-4 06:06:14

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

冷月葬花魂 发表于 2015-2-9 17:03:47

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

因胸联盟 发表于 2015-2-16 16:43:12

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

分手快乐 发表于 2015-3-5 06:57:39

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

愤怒的大鸟 发表于 2015-3-11 23:51:08

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

再见西城 发表于 2015-3-19 16:31:04

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

飘飘悠悠 发表于 2015-3-28 21:30:54

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
页: [1]
查看完整版本: ASP.NET教程之Unity+MVC:完成IDependencyResolver接口必要注重的中央仓酷云