手机版

扩展ASP.NET MVC三层框架 使用StructureMap实现依赖注入1-Model�

时间:2021-11-22 来源:互联网 编辑:宝哥软件园 浏览:

本文将介绍如何添加服务和存储库层,以及如何使用StructureMap将服务层注入控制器,将存储库注入服务层。服务层主要是我们的业务逻辑层,它不处理底层的数据库,而是处理存储库数据持久层。本文利用结构图的依赖注入,使控制器、服务和存储库的耦合度最小化。该系统使用了NorthWind开源数据,使用EntityFramework5.0实现了数据库的对象映射。言归正传,先来看看形成的框架结构,围绕这张截图展开。mvc-customized-framework

首先来看看Project mvc-customized-framework的内容。

这是我们的EntityFramwork的edmx文件和由Northwind的数据库表映射的对象集。在这里,当构建ADO.Net实体数据模型时,我们没有使用默认方法生成一堆。tt的文件,但使用了旧的形式。实现方法是根据默认程序建立数据模型,并删除。建立数据模型后的tt文件。然后打开。在edmx文件中,右键单击空白处并选择Properties,将出现下面的截图。此时只需要修改代码生成策略的值(中文翻译不知道是什么,第一个是对的),默认值为None,我们修改为Default,然后保存。edmx edmx-propertoties

你应该已经注意到了,项目里多了一个TYEntities.cs文件,这个我们是我们这个系统中实现交易(事务处理)的关键。我们使用静电和[线程静态]属性来保证一个线程拿到的对象上下文总是同一个,这就解决了交易事务的问题。没有解释到的请详细阅读下面代码里面的注释。复制代码代码如下:使用系统;使用系统。集合。通用;使用系统Linq .使用系统。文字;使用系统。线程化。任务;使用系统网络.命名空间第七学期.模型{公共分部类类型实体{ #区域字段//定义索引名称const字符串上下文键=' TYEntities//标记为threadstationattribute的静态字段不在线程之间共享。 //每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段,则该字段将包含不同的值[线程静态]私有静态TYEntities _ current# endregion #区域属性公共bool Disposed { get设置;} ///摘要///当系统工作在HttpContext下,将使用延迟家在技术返回一个对象上下文,如果没有HttpContext将返回null //////不论在哪里使用TYEntities,在请求结束后都需要调用泰因提斯.清理()方法///最佳的方式是泰因提斯.清理()放到Global.asax.cs文件里面///void Application_EndRequest(对象发送者,EventArgs e) ///{ ///TYStudioDemo .模特。泰因提斯。清理();///}////EB request { get { var context=HttpContext }的摘要私有静态tyEntities .当前;//检查HttpContext是否存在如果(上下文!=null) { //试着从语境中得到TYEntities var结果=上下文.项目[上下文关键字]作为类型;如果(结果==null) { //创建新的数据上下文,并且保存到语境里面result=new TYEntities();语境项目[上下文键]=结果;}返回结果;}返回null} } ///摘要///这是一个用来获取对象上下文的公共属性//////如果你通过HttpContext获取TYEntities,同样不论在哪里使用TYEntities,在请求结束后都需要调用泰因提斯.清理()方法//////如果没有通过HttpContext获取TYEntities,你必须在使用结束之后调用泰因提斯.清理()方法,来清理ObjectContext。//////需要注意的一点是,无论使用哪种方式获取TYEntities,我们都必须手动的清理和处置实体(对象上下文).///所以一定不要在使用块中使用对象上下文。////摘要公共静态类型当前{ get { //从HttpContext中获取datacontext var result=TYEntities .ForWebRequest如果(结果!=null)返回结果;//试着获取当前活动的TYEntities if(_ current==null)_ current=new TYEntities();返回_当前;} } ///摘要///清理结束TYEntities(对象上下文)////summary public static void clean up(){ if(HttpContext .当前!=null) { var result=HttpContext .当前项目[上下文关键字]作为实体;如果(结果!=null)结果dispose();HttpContext .当前。项目[上下文键]=空;} else if (_current!=null) { _current .dispose();_ current=null} }受保护的覆盖无效处置(已处置){已处置=已处置;Disposed=trueif(!已处置)清理();基地。处置} # endregion } }

版权声明:扩展ASP.NET MVC三层框架 使用StructureMap实现依赖注入1-Model�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。