
在常见的用例场景下,类图的对象图如下:

仓储采用依赖注入模式 + 使用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或其它)。
代码示例
复制代码 代码如下:
