好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 擴展ASP.NET MVC三層框架且使用StructureMap實現(xiàn)依賴注入1-Model層

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

熱門標簽:泰州手機外呼系統(tǒng)軟件 怎樣在地圖標注消火栓圖形 內蒙古智能電銷機器人哪家強 杭州智能電話機器人 廈門四川外呼系統(tǒng) 濟源人工智能電話機器人價格 地圖標注位置多的錢 山東防封電銷卡辦理套餐 百度地圖標注點擊事件

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

本系統(tǒng)使用NorthWind開源數(shù)據(jù),并且使用EntityFramework5.0實現(xiàn)對數(shù)據(jù)庫的Object映射。

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

 

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

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



你應該已經(jīng)注意到了,項目里多了一個TYEntities.cs文件,這個我們是我們這個系統(tǒng)中實現(xiàn)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的靜態(tài)字段不在線程之間共享。
         //每個執(zhí)行線程都有單獨的字段實例,并且獨立地設置及獲取該字段的值。如果在不同的線程中訪問該字段,則該字段將包含不同的值。
         [ThreadStatic]
         private static TYEntities _current;

         #endregion

         #region Properties

         public bool Disposed { get; set; }

         /// summary>
         /// 當系統(tǒng)工作在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)
                     {
                         //創(chuàng)建新的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
     }
 }

您可能感興趣的文章:
  • 詳解asp.net core 依賴注入
  • ASP.NET Core 過濾器中使用依賴注入知識點總結
  • ASP.NET MVC實現(xiàn)依賴注入的完整過程
  • ASP.NET Core依賴注入系列教程之控制反轉(IoC)
  • ASP.NET Core依賴注入系列教程之服務的注冊與提供
  • 詳解ASP.NET Core 中的框架級依賴注入
  • 詳解ASP.NET Core 在 JSON 文件中配置依賴注入
  • 解讀ASP.NET 5 & MVC6系列教程(7):依賴注入
  • 在ASP.Net Web Forms中使用依賴注入的步驟

標簽:喀什 新鄉(xiāng) 洛陽 百色 周口 朔州 臺州 朝陽

巨人網(wǎng)絡通訊聲明:本文標題《擴展ASP.NET MVC三層框架且使用StructureMap實現(xiàn)依賴注入1-Model層》,本文關鍵詞  擴展,ASP.NET,MVC,三層,框架,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《擴展ASP.NET MVC三層框架且使用StructureMap實現(xiàn)依賴注入1-Model層》相關的同類信息!
  • 本頁收集關于擴展ASP.NET MVC三層框架且使用StructureMap實現(xiàn)依賴注入1-Model層的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 风流女警察一级毛片| chineseoldman恋老年| 亚洲欧美日韩精品久久亚洲区| 又黄又刺激好看的小说A毛片| 国产女学生一级A片在那里找| 国产成人精品亚洲一区| 一级做a爰片久久毛片A片护士| 国产91??丝袜在线播放00| 免费看隐私jk美女网站| 毛片毛片大全aaaa| 98k电影完整版在线观看| 国产精品久久国产精麻豆99网站 | 校园啊…嗯啊好深bl肉| 无码毛片一区二区三区视频免费播放 | 国产高清视频青青青在线| 老板和我共享娇妻| 欧美Free性XXOOHD| 邻居(高H,双性,饥渴受)男男小说 【男男】开荤粗肉-v文 原野 | 国产污视频在线观看| 使劲灬把麻麻弄爽了在线观看| 九七伦理97伦理手机| 把美女屁股扒开进去| 她她真漂亮我了| 美女老师电影| 附近学生200元随叫随到徐州 | 扑克视频免费下载软件大全| 怎么知道女人下面紧不紧| 精品少妇a 6 2v久久欧美| 久久亚洲国产精品五月天婷| 欧美性精品hdvideosex| 人妻精品一区一区三区蜜桃91| 国产麻豆Av一区二区三| 美女操网站| 久久福利资源站免费观看i| 乌克兰精品摘花处破| 狠狠干狠狠艹| 久久久久久精品无码人妻AⅤ麻豆| 韩国演艺圈1313群奴视频| 两个人免费完整在线观看国语| 母乱| 国精产品一区二区三区红桃|