仓酷云

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

本版积分规则

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

GMT+8, 2024-4-27 13:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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