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

主頁 > 知識庫 > 關于DDD:管理工作單元實例的兩種模式的使用方法

關于DDD:管理工作單元實例的兩種模式的使用方法

熱門標簽:凱立德導航官網地圖標注 五常地圖標注 萊蕪外呼電銷機器人價格 戶外地圖標注軟件手機哪個好用 地圖標注和認領 電銷語音自動機器人 長春呼叫中心外呼系統哪家好 鄭州400電話辦理 聯通 智能電話營銷外呼系統
圖如下:

在常見的用例場景下,類圖的對象圖如下:

問題在一個用例執行過程中,如何保證同一個界限上下文內的所有倉儲實例可以共享同一個工作單元實例?解決方案1 
倉儲采用依賴注入模式 + 使用IOC管理工作單元的生命周期(PerRequest或其它)。

代碼示例

復制代碼 代碼如下:

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 using Autofac;

 namespace AutoFacStudy
 {
     class Program
     {
         static void Main(string[] args)
         {
             var buider = new ContainerBuilder();
             buider.RegisterType服務>();
             buider.RegisterType倉儲A>();
             buider.RegisterType倉儲B>();
             buider.RegisterType工作單元>().InstancePerLifetimeScope();

             var container = buider.Build();

             dynamic 服務 = container.Resolve服務>();

             //下邊兩行代碼輸出一樣
             Console.WriteLine(服務.倉儲A.工作單元.GetHashCode());
             Console.WriteLine(服務.倉儲B.工作單元.GetHashCode());
         }
     }

     public class 服務
     {
         private readonly 倉儲A _倉儲A;
         private readonly 倉儲B _倉儲B;

         public 服務(倉儲A 倉儲A, 倉儲B 倉儲B)
         {
             _倉儲A = 倉儲A;
             _倉儲B = 倉儲B;
         }

         public 倉儲A 倉儲A
         {
             get { return _倉儲A; }
         }

         public 倉儲B 倉儲B
         {
             get { return _倉儲B; }
         }
     }

     public class 工作單元 { }

     public class 倉儲A
     {
         private readonly 工作單元 _工作單元;

         public 倉儲A(工作單元 工作單元)
         {
             _工作單元 = 工作單元;
         }

         public 工作單元 工作單元
         {
             get { return _工作單元; }
         }
     }

     public class 倉儲B
     {
         private readonly 工作單元 _工作單元;

         public 倉儲B(工作單元 工作單元)
         {
             _工作單元 = 工作單元;
         }

         public 工作單元 工作單元
         {
             get { return _工作單元; }
         }
     }
 }

解決方案2
倉儲采用服務定位器模式 + 使用服務定位器或簡單工廠管理工作單元的生命周期(PerRequest或其它)。
代碼示例
復制代碼 代碼如下:

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 using Autofac;

 namespace AutoFacStudy
 {
     class Program
     {
         public static IContainer 服務定位器;

         static void Main(string[] args)
         {
             var buider = new ContainerBuilder();
             buider.RegisterType服務>();
             buider.RegisterType倉儲A>();
             buider.RegisterType倉儲B>();
             buider.RegisterType工作單元>().InstancePerLifetimeScope();

             服務定位器 = buider.Build();

             dynamic 服務 = 服務定位器.Resolve服務>();

             //下邊兩行代碼輸出一樣
             Console.WriteLine(服務.倉儲A.工作單元.GetHashCode());
             Console.WriteLine(服務.倉儲B.工作單元.GetHashCode());
         }
     }

     public class 服務
     {
         private readonly 倉儲A _倉儲A;
         private readonly 倉儲B _倉儲B;

         public 服務(倉儲A 倉儲A, 倉儲B 倉儲B)
         {
             _倉儲A = 倉儲A;
             _倉儲B = 倉儲B;
         }

         public 倉儲A 倉儲A
         {
             get { return _倉儲A; }
         }

         public 倉儲B 倉儲B
         {
             get { return _倉儲B; }
         }
     }

     public class 工作單元 { }

     public class 倉儲A
     {
         private readonly 工作單元 _工作單元;

         public 倉儲A()
         {
             _工作單元 = Program.服務定位器.Resolve工作單元>();
         }

         public 工作單元 工作單元
         {
             get { return _工作單元; }
         }
     }

     public class 倉儲B
     {
         private readonly 工作單元 _工作單元;

         public 倉儲B()
         {
             _工作單元 = Program.服務定位器.Resolve工作單元>();
         }

         public 工作單元 工作單元
         {
             get { return _工作單元; }
         }
     }
 }

由此示例可以看出,服務定位器和依賴注入可以混合在一起使用。這個例子我為了簡單,服務定位器和IOC容器是同一個實例。

有些系統將服務定位器的實現換成簡單工廠模式,他們本質上是一樣的(服務定位器是一個萬能工廠)。

代碼示例

復制代碼 代碼如下:

public class 工作單元工廠
 {
     public static 工作單元 創建()
     {
         var 工作單元 = (工作單元)CallContext.GetData("工作單元");

         if (工作單元 == null)
         {
             工作單元 = new 工作單元();
             CallContext.SetData("工作單元", 工作單元);
         }

         return 工作單元;
     }
 }

標簽:福州 湖州 宣城 紅河 岳陽 西藏 衢州 西寧

巨人網絡通訊聲明:本文標題《關于DDD:管理工作單元實例的兩種模式的使用方法》,本文關鍵詞  關于,DDD,管理工作,單元,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《關于DDD:管理工作單元實例的兩種模式的使用方法》相關的同類信息!
  • 本頁收集關于關于DDD:管理工作單元實例的兩種模式的使用方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: ROSI丝袜大胆福利视频邦女郎| 日本亚洲综合伊人久久| 亚洲欧美网| 哦┅┅快┅┅用力啊┅┅村| 亚洲激情自拍| www..avxsl.com| 亚洲AV久久无码秘?原神| 边做饭边被躁BD小说| 99视频国产精品免费观看A| 女色综合| 一级做α爱过程免费视频| 91土豪约大长腿美女嫩模| 艳魔大战2春荡女婬在线播放| 操露脸| yy6080韩国日本三理论免费 | 《美味人妻》HD| 米兰chineseshemale| 国产精品无码无卡毛片不卡视频| 父女乱操| 虎虎影院| 没戴套让他C了一天| 亚洲 欧美 自拍 第15页| 日韩国产一区二区在线观看 | 国产伦国产伦老熟300部| 久久国产人妻午夜一区二区三区 | 久久精品丁香五月AV人妻一区| 亚洲天堂视频在线免费观看| bennettbrea大战黑人| 欧美一级特黄A片免费看| 日本三级电影网址| 一级毛片一级A片免费播放妖精 | 强开乖女嫩苞又嫩又紧h在线观看 巨胸爆乳露双奶头被?侵犯免费 | 国产足浴漂亮丰满技师AV| 亚洲码欧洲码一二三四五区别| 甜性涩爱2003无删减完整版在线看 | 麻豆国产精品色欲AV亚洲三区| 色鬼成人免费视频观看| 欧美日韩在线播放| 泰国一级特黄在线观看大片| 最新狠狠色狠狠色综合| 十大污应用|