手机版

关于DDD:管理工作单元实例quot如何使用的两种模式?

时间:2021-11-20 来源:互联网 编辑:宝哥软件园 浏览:

图为:

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

如何确保在一个用例的执行过程中,同一边界上下文中的所有仓库实例可以共享同一个工作单元实例?解决方案1仓库采用依赖注入模式,使用IOC管理工作单元(PerRequest或其他)的生命周期。示例代码复制代码如下:使用系统;使用系统。集合。通用;使用系统。Linq使用系统。文字;使用系统。线程化。任务;使用Autofac命名空间auto acstudy { class Program { static void Main(string[]args){ var buider=new container builder();大楼。RegisterType服务();比德。注册类型仓库A();比德。注册类型仓库B();比德。RegisterType工作单元()。instanceperlifetimesscope();var容器=buider。build();动态服务=容器。解析服务();//下面两行代码输出同一个Console。WriteLine(service . warehouse . work GetHashCode());控制台。WriteLine(服务。仓库b .工作单位。GetHashCode());}}公共类服务{私有只读仓库A _ warehouse a私有只读仓库B _仓库B;公共服务(仓储A仓储A,仓储B仓储B) {_仓储A=仓储A;_仓库B=仓库B;}公共仓库A仓库A { get { return _ warehouse a}}公共仓库B仓库B { get { return _ warehouse b}}}公共类工作单元{}公共类仓库A {私有只读工作单元_工作单元;仓库a(工作单元工作单元){_工作单元=工作单元;}公共工作单位工作单位{ get { return _ work unit}}}公共类仓库B {私有只读工作单元_ work unit仓库b(工作单元工作单元){_工作单元=工作单元;}公共工作单位工作单位{ get { return _ work unit}}}}解决方案2仓储采用服务定位器模式,使用服务定位器或简单工厂来管理工作单元(PerRequest或其他)的生命周期。示例代码复制代码如下:使用系统;使用系统。集合。通用;使用系统。Linq使用系统。文字;使用系统。线程化。任务;使用Autofac命名空间autofacstudy {类程序{公共静态icontainer服务定位器;静态void Main(string[]args){ var buider=new container builder();大楼。RegisterType服务();比德。注册类型仓库A();比德。注册类型仓库B();比德。RegisterType工作单元()。instanceperlifetimesscope();服务定位器=buider。build();动态服务=服务定位器。解析服务();//下面两行代码输出相同的Console。WriteLine(service . warehouse . work GetHashCode());控制台。WriteLine(服务。仓库b .工作单位。GetHashCode());}}公共类服务{私有只读仓库A _ warehouse a私有只读仓库B _仓库B;公共服务(仓储A仓储A,仓储B仓储B) {_仓储A=仓储A;_仓库B=仓库B;}公共仓库A仓库A { get { return _ warehouse a}}公共仓库B仓库B { get { return _ warehouse b}}}公共类工作单元{}公共类仓库A {私有只读工作单元_工作单元;仓库A() {_工作单元=程序。服务定位器。解析工作单元();}公共工作单位工作单位{ get { return _ work unit}}}公共类仓库B {私有只读工作单元_ work unit仓库B() {_工作单元=程序。服务定位器。解析工作单元();}公共工作单位工作单位{ get { return _ work unit}}}}这个例子说明了服务定位器和依赖注入可以一起使用。在这个例子中,为了简单起见,服务定位器和IOC容器是同一个实例。一些系统用工厂方法模式代替服务定位器的实现,它们本质上是相同的(服务定位器是一个通用工厂)。示例复制代码代码如下:公共类工作单元工厂{公共静态工作单元创建(){var工作单元=(工作单元)CallContext。GetData('工作单元');If(工作单位==null){工作单位=新工作单位();CallContext。SetData('工作单元',工作单元);}返回工作单位;}}

版权声明:关于DDD:管理工作单元实例quot如何使用的两种模式?是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。