仓酷云

标题: ASP.NET编程:ASP.NET MVC中利用Unity Ioc Container... [打印本页]

作者: 柔情似水    时间: 2015-1-16 22:17
标题: ASP.NET编程:ASP.NET MVC中利用Unity Ioc Container...
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。  在MVC中,把持器依附于模子对数据举行处置,也能够说实行营业逻辑。我们可使用依附注进(DI)在把持层分别模子层,这边要用到Repository形式,在范畴驱动计划(DDD)中,Repository翻译为仓储,望文生义,就是贮存器材的堆栈,能够了解为一种用来封装存储,读取和查找举动的机制,它摹拟了一个工具汇合。利用依附注进(DI)就是对Repository举行办理,用于办理它与把持器之间耦合度成绩,上面我们一步一步做一个复杂示例。
安装Unity

  起首我们必要新建一个UnityMVCDemo项目(ASP.NETMVC4.0),选择工具-库程序保证理器-程序保证理把持台,输出“Install-PackageUnity.Mvc4”命令,VS2010大概必要先安装NuGet。
ASP.NET编程:ASP.NET MVC中利用Unity Ioc Container...
登录/注册后可看大图

  大概经由过程工具-库程序保证理器-办理办理计划的NuGet程序包,经由过程联机搜刮“Unity.Mvc4”举行安装。
ASP.NET编程:ASP.NET MVC中利用Unity Ioc Container...
登录/注册后可看大图

  在安装过程当中大概会碰到上面如许毛病:
ASP.NET编程:ASP.NET MVC中利用Unity Ioc Container...
登录/注册后可看大图

  依据非常信息,能够一定是项目标.netframework版本没法安装Unity,这类安装VS会主动搜刮Unity最新版本,可是最新版本常常有.netframework版本请求,不晓得有无指定Unity版本安装,能够看到我们安装的是Unity3.0版本,修正一下项目.netframework的版本为4.5,从头安装就能够了。
  安装Unity乐成后,我们发明项目中多了“Microsoft.Practices.Unity”和“Microsoft.Practices.Unity.Configuration”两个援用,另有一个Bootstrapper类文件,Bootstrapper翻译为引诱程序,也就是Ioc容器。
  1. publicstaticclassBootstrapper{publicstaticIUnityContainerInitialise(){varcontainer=BuildUnityContainer();DependencyResolver.SetResolver(newUnityDependencyResolver(container));returncontainer;}privatestaticIUnityContainerBuildUnityContainer(){varcontainer=newUnityContainer();//registerallyourcomponentswiththecontainerhere//itisNOTnecessarytoregisteryourcontrollers//e.g.container.RegisterType<ITestService,TestService>();RegisterTypes(container);returncontainer;}publicstaticvoidRegisterTypes(IUnityContainercontainer){}}
复制代码
增加服务层

  起首我们增加一个Article实体类:
  1. ///<summary>///Article实体类///</summary>publicclassArticle{publicintId{get;set;}publicstringTitle{get;set;}publicstringAuthor{get;set;}publicstringContent{get;set;}publicDateTimeCreateTime{get;set;}}
复制代码
 一样平常Repository都有一些类似的操纵,好比增编削查,我们能够把它笼统为IArticleRepository接口,如许把持器依附于笼统接口,而不依附于详细完成Repository类,切合依附颠倒准绳,我们才可使用Unity举行依附注进。
  1. ///<summary>///IArticleRepository接口///</summary>publicinterfaceIArticleRepository{IEnumerable<Article>GetAll();ArticleGet(intid);ArticleAdd(Articleitem);boolUpdate(Articleitem);boolDelete(intid);}
复制代码
  创立ArticleRepository,依附于IArticleRepository接口,完成基础操纵。
  1. publicclassArticleRepository:IArticleRepository{privateList<Article>Articles=newList<Article>();publicArticleRepository(){//增加演示数据Add(newArticle{Id=1,Title="UnityMVCDemo1",Content="UnityMVCDemo",Author="xishuai",CreateTime=DateTime.Now});Add(newArticle{Id=2,Title="UnityMVCDemo2",Content="UnityMVCDemo",Author="xishuai",CreateTime=DateTime.Now});Add(newArticle{Id=3,Title="UnityMVCDemo2",Content="UnityMVCDemo",Author="xishuai",CreateTime=DateTime.Now});}///<summary>///猎取全体文章///</summary>///<returns></returns>publicIEnumerableGetAll(){returnArticles;}///<summary>///经由过程ID猎取文章///</summary>///<paramname="id"></param>///<returns></returns>publicArticleGet(intid){returnArticles.Find(p=>p.Id==id);}///<summary>///增加文章///</summary>///<paramname="item"></param>///<returns></returns>publicArticleAdd(Articleitem){if(item==null){thrownewArgumentNullException("item");}Articles.Add(item);returnitem;}///<summary>///更新文章///</summary>///<paramname="item"></param>///<returns></returns>publicboolUpdate(Articleitem){if(item==null){thrownewArgumentNullException("item");}intindex=Articles.FindIndex(p=>p.Id==item.Id);if(index==-1){returnfalse;}Articles.RemoveAt(index);Articles.Add(item);returntrue;}///<summary>///删除文章///</summary>///<paramname="id"></param>///<returns></returns>publicboolDelete(intid){Articles.RemoveAll(p=>p.Id==id);returntrue;}}
复制代码
IArticleRepository范例映照

  下面事情做好后,我们必要在Bootstrapper中的BuildUnityContainer办法增加此范例映照。
  1. privatestaticIUnityContainerBuildUnityContainer(){varcontainer=newUnityContainer();//registerallyourcomponentswiththecontainerhere//itisNOTnecessarytoregisteryourcontrollerscontainer.RegisterType<IArticleRepository,ArticleRepository>();//e.g.container.RegisterType<ITestService,TestService>();RegisterTypes(container);returncontainer;}
复制代码
 我们还能够在设置文件中增加范例映照,UnityContainer依据设置信息,主动注册相干范例,如许我们就只需改设置文件了,固然保举是这类办法,设置文件:
  1. <configSections><sectionname="unity"type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/></configSections><unity><containers><containername="defaultContainer"><registertype="UnityMVCDemo.Models.IArticleRepository,UnityMVCDemo"mapTo="UnityMVCDemo.Models.ArticleRepository,UnityMVCDemo"/></container></containers></unity>
复制代码
 注重configSections节点要放在configuration节点下的第一个节点,关于Unity的设置文件设置参照http://www.ckuyun.com/xishuai/p/3670292.html,加载设置文件代码:
  1. 1UnityConfigurationSectionconfiguration=(UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);2configuration.Configure(container,"defaultContainer");
复制代码
  下面这段代码交换失落下面利用的RegisterType办法。
服务注进到把持器

  在ArticleController中我们利用是机关器注进体例,固然另有属性注进和办法注进,能够看到ArticleController依附于笼统IArticleRepository接口,而并非依附于ArticleRepository详细完成类。
  1. publicclassArticleController:Controller{readonlyIArticleRepositoryrepository;//机关器注进publicArticleController(IArticleRepositoryrepository){this.repository=repository;}publicActionResultIndex(){vardata=repository.GetAll();returnView(data);}}
复制代码
Global.asax初始化

  做完下面的事情后,我们必要在Global.asax中的Application_Start办法增加依附注进初始化。
  1. //Note:ForinstructionsonenablingIIS6orIIS7classicmode,//visithttp://go.microsoft.com/?LinkId=9394801publicclassMvcApplication:System.Web.HttpApplication{protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);Bootstrapper.Initialise();}}
复制代码
示例代码下载:http://pan.baidu.com/s/1qWoCy9e。
你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)java是开放的,相同的工具就会有很多公司在做,加上java已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。
作者: 灵魂腐蚀    时间: 2015-1-19 06:48
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
作者: 乐观    时间: 2015-1-26 15:34
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
作者: 精灵巫婆    时间: 2015-2-4 20:05
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
作者: 小魔女    时间: 2015-2-10 06:23
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
作者: 愤怒的大鸟    时间: 2015-3-10 12:24
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 蒙在股里    时间: 2015-3-17 07:07
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者: 海妖    时间: 2015-3-24 00:52
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。




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