|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在经过全球个人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。
大概经由过程工具-库程序保证理器-办理办理计划的NuGet程序包,经由过程联机搜刮“Unity.Mvc4”举行安装。
在安装过程当中大概会碰到上面如许毛病:
依据非常信息,能够一定是项目标.netframework版本没法安装Unity,这类安装VS会主动搜刮Unity最新版本,可是最新版本常常有.netframework版本请求,不晓得有无指定Unity版本安装,能够看到我们安装的是Unity3.0版本,修正一下项目.netframework的版本为4.5,从头安装就能够了。
安装Unity乐成后,我们发明项目中多了“Microsoft.Practices.Unity”和“Microsoft.Practices.Unity.Configuration”两个援用,另有一个Bootstrapper类文件,Bootstrapper翻译为引诱程序,也就是Ioc容器。- 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实体类:- ///<summary>///Article实体类///</summary>publicclassArticle{publicintId{get;set;}publicstringTitle{get;set;}publicstringAuthor{get;set;}publicstringContent{get;set;}publicDateTimeCreateTime{get;set;}}
复制代码 一样平常Repository都有一些类似的操纵,好比增编削查,我们能够把它笼统为IArticleRepository接口,如许把持器依附于笼统接口,而不依附于详细完成Repository类,切合依附颠倒准绳,我们才可使用Unity举行依附注进。- ///<summary>///IArticleRepository接口///</summary>publicinterfaceIArticleRepository{IEnumerable<Article>GetAll();ArticleGet(intid);ArticleAdd(Articleitem);boolUpdate(Articleitem);boolDelete(intid);}
复制代码 创立ArticleRepository,依附于IArticleRepository接口,完成基础操纵。- 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办法增加此范例映照。- privatestaticIUnityContainerBuildUnityContainer(){varcontainer=newUnityContainer();//registerallyourcomponentswiththecontainerhere//itisNOTnecessarytoregisteryourcontrollerscontainer.RegisterType<IArticleRepository,ArticleRepository>();//e.g.container.RegisterType<ITestService,TestService>();RegisterTypes(container);returncontainer;}
复制代码 我们还能够在设置文件中增加范例映照,UnityContainer依据设置信息,主动注册相干范例,如许我们就只需改设置文件了,固然保举是这类办法,设置文件:- <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,加载设置文件代码:- 1UnityConfigurationSectionconfiguration=(UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);2configuration.Configure(container,"defaultContainer");
复制代码 下面这段代码交换失落下面利用的RegisterType办法。
服务注进到把持器
在ArticleController中我们利用是机关器注进体例,固然另有属性注进和办法注进,能够看到ArticleController依附于笼统IArticleRepository接口,而并非依附于ArticleRepository详细完成类。- publicclassArticleController:Controller{readonlyIArticleRepositoryrepository;//机关器注进publicArticleController(IArticleRepositoryrepository){this.repository=repository;}publicActionResultIndex(){vardata=repository.GetAll();returnView(data);}}
复制代码 Global.asax初始化
做完下面的事情后,我们必要在Global.asax中的Application_Start办法增加依附注进初始化。- //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已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。 |
|