<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        擴展ASP.NET MVC三層框架且使用StructureMap實現依賴注入1-Model層

        來源:懂視網 責編:小采 時間:2020-11-27 22:41:29
        文檔

        擴展ASP.NET MVC三層框架且使用StructureMap實現依賴注入1-Model層

        擴展ASP.NET MVC三層框架且使用StructureMap實現依賴注入1-Model層:本篇文章將向大家介紹如何添加Service和Repository層并且使用StructureMap把Service層注入到Controller,把Repository注入到Service層。Service層主要是我們的業務邏輯層,這一層不和底層的Database打交道,和Database打交道的是Reposi
        推薦度:
        導讀擴展ASP.NET MVC三層框架且使用StructureMap實現依賴注入1-Model層:本篇文章將向大家介紹如何添加Service和Repository層并且使用StructureMap把Service層注入到Controller,把Repository注入到Service層。Service層主要是我們的業務邏輯層,這一層不和底層的Database打交道,和Database打交道的是Reposi

        本篇文章將向大家介紹如何添加Service和Repository層并且使用StructureMap把Service層注入到Controller,把Repository注入到Service層。Service層主要是我們的業務邏輯層,這一層不和底層的Database打交道,和Database打交道的是Repository數據持久層。本篇文章通過使用StructureMap依賴注入使Controller,Service,Repository三層的耦合度降到最低。

        本系統使用NorthWind開源數據,并且使用EntityFramework5.0實現對數據庫的Object映射。

        開始正題之前先來看一下成型的框架結構,我們將圍繞這個截圖進行展開。

        mvc-customized-framework

         

        首先我們看TYStudioDemo.Models這個Project里面的內容

        mvc-customized-framework

        這里面有我們的EntityFramwork的edmx文件,Northwind的數據庫表映射的對象集合。這里建立ADO.Net Entity Data Model的時候沒有使用默認生成一堆.tt文件的方式,而是使用了老的形式。實現方法是首先按默認程序建立起data model,建立好data model之后刪除.tt文件。然后打開.edmx文件,右鍵單擊空白處選擇Properties(屬性),會出現下面的截圖,這時候只需要修改一下Code Generation Strategy(中文翻譯不知道是什么,第一個就對了)的值,默認是None,我們修改為Default,然后保存.edmx

        edmx-propertoties

        你應該已經注意到了,項目里多了一個TYEntities.cs文件,這個我們是我們這個系統中實現Transaction(事務處理)的關鍵。
        我們使用static和[ThreadStatic]屬性來保證一個線程拿到的TYEntities(ObjectContext)總是同一個,這就解決了Transaction事務的問題。沒有解釋到的請詳細閱讀下面代碼里面的注釋。

        代碼如下:
        using System;
         using System.Collections.Generic;
         using System.Linq;
         using System.Text;
         using System.Threading.Tasks;
         using System.Web;

         namespace TYStudioDemo.Models
         {
             public partial class TYEntities
             {
                 #region Fields

                 //定義索引名稱
                 const string ContextKey = "TYEntities";

                 //標記為ThreadStaticAttribute的靜態字段不在線程之間共享。
                 //每個執行線程都有單獨的字段實例,并且獨立地設置及獲取該字段的值。如果在不同的線程中訪問該字段,則該字段將包含不同的值。
                 [ThreadStatic]
                 private static TYEntities _current;

                 #endregion

                 #region Properties

                 public bool Disposed { get; set; }

                 /// <summary>
                 /// 當系統工作在HttpContext下,將使用延遲家在技術返回一個TYEntities(ObjectContext),如果沒有HttpContext將返回null
                 ///
                 /// 不論在哪里使用TYEntities,在請求結束后都需要調用TYEntities.Cleanup()方法
                 /// 最佳的方式是TYEntities.Cleanup()放到Global.asax.cs文件里面。
                 /// void Application_EndRequest(object sender, EventArgs e)
                 /// {
                 ///     TYStudioDemo.Models.TYEntities.Cleanup();
                 /// }
                 /// </summary>
                 private static TYEntities ForWebRequest
                 {
                     get
                     {
                         var context = HttpContext.Current;

                         //檢查HttpContext是否存在
                         if (context != null)
                         {
                             //試著從context中得到TYEntities
                             var result = context.Items[ContextKey] as TYEntities;

                             if (result == null)
                             {
                                 //創建新的datacontext,并且保存到context里面
                                 result = new TYEntities();
                                 context.Items[ContextKey] = result;
                             }

                             return result;
                         }

                         return null;
                     }
                 }

                 /// <summary>
                 /// 這是一個用來獲取TYEntities(ObjectContext)的公共屬性
                 ///
                 /// 如果你通過HttpContext獲取TYEntities,同樣不論在哪里使用TYEntities,在請求結束后都需要調用TYEntities.Cleanup()方法
                 ///
                 /// 如果沒有通過HttpContext獲取TYEntities,你必須在使用結束之后調用TYEntities.Cleanup()方法,來清理ObjectContext。
                 ///
                 /// 需要注意的一點是,無論使用哪種方式獲取TYEntities,我們都必須手動的清理和Dispose TYEntities(ObjectContext)。
                 /// 所以一定不要在using塊中使用TYEntities(ObjectContext)。
                 /// </summary>
                 public static TYEntities Current
                 {
                     get
                     {
                         //從HttpContext中獲取datacontext
                         var result = TYEntities.ForWebRequest;

                         if (result != null)
                             return result;

                         //試著獲取當前活動的TYEntities
                         if (_current == null)
                             _current = new TYEntities();

                         return _current;
                     }
                 }

                 /// <summary>
                 /// 清理結束TYEntities(ObjectContext)
                 /// </summary>
                 public static void Cleanup()
                 {
                     if (HttpContext.Current != null)
                     {
                         var result = HttpContext.Current.Items[ContextKey] as TYEntities;

                         if (result != null)
                             result.Dispose();

                         HttpContext.Current.Items[ContextKey] = null;
                     }
                     else if (_current != null)
                     {
                         _current.Dispose();
                         _current = null;
                     }
                 }

         
                 protected override void Dispose(bool disposing)
                 {
                     bool disposed = Disposed;
                     Disposed = true;

                     if (!disposed)
                         Cleanup();

                     base.Dispose(disposing);
                 }

                 #endregion
             }
         }

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        擴展ASP.NET MVC三層框架且使用StructureMap實現依賴注入1-Model層

        擴展ASP.NET MVC三層框架且使用StructureMap實現依賴注入1-Model層:本篇文章將向大家介紹如何添加Service和Repository層并且使用StructureMap把Service層注入到Controller,把Repository注入到Service層。Service層主要是我們的業務邏輯層,這一層不和底層的Database打交道,和Database打交道的是Reposi
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产国拍亚洲精品mv在线观看 | 亚洲五月丁香综合视频| 91成人免费观看在线观看| 日产国产精品亚洲系列| 毛片亚洲AV无码精品国产午夜| 亚洲av一本岛在线播放| 日韩在线播放全免费| 亚洲成a人片在线观| 91黑丝国产线观看免费 | 国产精品久久久久久亚洲影视 | 亚洲日本在线观看网址| 91久久精品国产免费直播| 亚洲白色白色在线播放| 最近最新的免费中文字幕| 亚洲日韩AV无码一区二区三区人| 处破痛哭A√18成年片免费| 亚洲国产日韩在线视频| 久久国产乱子精品免费女| 免费一看一级毛片| 一级毛片在线免费播放| 国产亚洲精品va在线| 99爱免费观看视频在线| 亚洲欧洲无码一区二区三区| 国产99视频精品免费视频7| 国产日韩在线视频免费播放| 久久亚洲精品国产精品黑人| 中文字幕乱码免费视频| 国产精品亚洲专区一区| 亚洲熟妇无码AV在线播放| 最近免费中文字幕高清大全| 亚洲kkk4444在线观看| 日本片免费观看一区二区| 亚洲无人区码一二三码区别图片| 国产传媒在线观看视频免费观看| baoyu777永久免费视频| 亚洲av成人综合网| 一本久到久久亚洲综合| 亚洲午夜免费视频| 337p日本欧洲亚洲大胆色噜噜| 成人毛片免费在线观看| 久久www免费人成精品香蕉|