国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

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

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:41:29
文檔

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

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

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

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

開始正題之前先來看一下成型的框架結(jié)構(gòu),我們將圍繞這個(gè)截圖進(jìn)行展開。

mvc-customized-framework

 

首先我們看TYStudioDemo.Models這個(gè)Project里面的內(nèi)容

mvc-customized-framework

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

edmx-propertoties

你應(yīng)該已經(jīng)注意到了,項(xiàng)目里多了一個(gè)TYEntities.cs文件,這個(gè)我們是我們這個(gè)系統(tǒng)中實(shí)現(xiàn)Transaction(事務(wù)處理)的關(guān)鍵。
我們使用static和[ThreadStatic]屬性來保證一個(gè)線程拿到的TYEntities(ObjectContext)總是同一個(gè),這就解決了Transaction事務(wù)的問題。沒有解釋到的請?jiān)敿?xì)閱讀下面代碼里面的注釋。

代碼如下:
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";

         //標(biāo)記為ThreadStaticAttribute的靜態(tài)字段不在線程之間共享。
         //每個(gè)執(zhí)行線程都有單獨(dú)的字段實(shí)例,并且獨(dú)立地設(shè)置及獲取該字段的值。如果在不同的線程中訪問該字段,則該字段將包含不同的值。
         [ThreadStatic]
         private static TYEntities _current;

         #endregion

         #region Properties

         public bool Disposed { get; set; }

         /// <summary>
         /// 當(dāng)系統(tǒng)工作在HttpContext下,將使用延遲家在技術(shù)返回一個(gè)TYEntities(ObjectContext),如果沒有HttpContext將返回null
         ///
         /// 不論在哪里使用TYEntities,在請求結(jié)束后都需要調(diào)用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>
         /// 這是一個(gè)用來獲取TYEntities(ObjectContext)的公共屬性
         ///
         /// 如果你通過HttpContext獲取TYEntities,同樣不論在哪里使用TYEntities,在請求結(jié)束后都需要調(diào)用TYEntities.Cleanup()方法
         ///
         /// 如果沒有通過HttpContext獲取TYEntities,你必須在使用結(jié)束之后調(diào)用TYEntities.Cleanup()方法,來清理ObjectContext。
         ///
         /// 需要注意的一點(diǎn)是,無論使用哪種方式獲取TYEntities,我們都必須手動(dòng)的清理和Dispose TYEntities(ObjectContext)。
         /// 所以一定不要在using塊中使用TYEntities(ObjectContext)。
         /// </summary>
         public static TYEntities Current
         {
             get
             {
                 //從HttpContext中獲取datacontext
                 var result = TYEntities.ForWebRequest;

                 if (result != null)
                     return result;

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

                 return _current;
             }
         }

         /// <summary>
         /// 清理結(jié)束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
     }
 }

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

擴(kuò)展ASP.NET MVC三層框架且使用StructureMap實(shí)現(xiàn)依賴注入1-Model層:本篇文章將向大家介紹如何添加Service和Repository層并且使用StructureMap把Service層注入到Controller,把Repository注入到Service層。Service層主要是我們的業(yè)務(wù)邏輯層,這一層不和底層的Database打交道,和Database打交道的是Reposi
推薦度:
標(biāo)簽: 依賴注入 mvc ASP.NET
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 久久久久国产成人精品亚洲午夜 | 国产91在线 | 日本 | 久久中文字幕久久久久91 | 亚洲一区日韩一区欧美一区a | 国产高清在线精品一区二区三区 | 欧美爱爱图 | 久久精品2 | 久久一次 | 99久久精品国产一区二区成人 | 成人a毛片免费视频观看 | 国产盗摄精品一区二区三区 | 国产一区不卡 | 可以免费看的毛片 | 欧美激情国产日韩精品一区18 | 国产一区二区精品久久91 | 日韩欧美精品一区二区三区 | 欧美一区精品二区三区 | 亚洲欧洲日韩综合 | 一区二区手机视频 | 欧美专区亚洲 | 亚洲三级电影在线观看 | 美女一级毛片 | 在线中文字幕第一页 | 五月婷婷综合网 | 国产成人黄网址在线视频 | 亚洲欧美在线免费观看 | 尤物视频在线 | 伊人精品久久久大香线蕉99 | 欧美一区二区三区在线播放 | 久草综合网 | 亚洲国产成人久久99精品 | 在线免费观看国产视频 | 久久中文字幕久久久久91 | 亚洲欧美综合图区官网 | 欧美日本一道本 | 亚洲日韩在线观看 | 欧美极品第一页 | 91.久久 | 亚洲wwww| 久久91精品国产91久久 | 色老头久久久久 |