博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DDD~Unity在DDD中的使用
阅读量:6852 次
发布时间:2019-06-26

本文共 2547 字,大约阅读时间需要 8 分钟。

上一讲介绍了,并提到下次要讲Unity,所以这篇文章当然就要介绍它了,呵呵,Unity是Microsoft.Practices中的一部分,主要实现了依赖注入的功能,或者叫它控制反转,对于控制反转(IoC)的文章我介绍了不少,,等等,今天主要说一下Unity!

在我的DDD架构项目中,各层间实现IoC使用的是Unity,因为考虑到AOP,cache等功能,所以就直接用Microsoft.Practices组件了,它真的很强大!这次的项目在业务上采用WCF实现,所以WCF业务与基础设施之间会有通信,而基础设施只是去实现Domain定义的功能,所以这两个层之间也会有通信,最后就是Domain与WCF之间同样存在着接口的通信,如图:

Domain层定义一个接口,部分代码如下:

     ///         /// 获取产品列表        ///         /// 
IQueryable
GetProduct();

基础设施层实现它

    public IQueryable
GetProduct() { return this.GetModel(); }

它们之间的通信不存在IoC,因为如果你要使用其它的持久化方法,可以再建立一个项目,以别一种方式去实现持久化

WCF去声明一个Domain层的接口,实例化它的基础设施层的实例,这个过程需要解耦合,我们使用Unity来实现,它需要我们在config中去定义如何去实例化。

public class ProductServiceImpl : IProductService    {        private readonly IProductRepository _productRepository;        ///         /// 构造方法注入        ///         ///         public ProductServiceImpl(IProductRepository productRepository)        {            if (productRepository == (IProductRepository)null)                throw new ArgumentException("context can't is null.");            _productRepository = productRepository;        }        #region IProductService 成员        public ProductDTO GetProductByID(int id)        {            Mapper.CreateMap
(); return Mapper.Map
(_productRepository.Find(id)); }}

上面使用unity中的构造方法注入,我们还可以使用服务调度器进行注入,看这种代码

 public class ProductService : ServiceBase, IProductService    {        //通过ServiceLocator从IoC容器中获得对象        IProductService _productService = ServiceLocator.Instance.GetService
(); #region IProductService 成员 public ProductDTO GetProductByID(int id) { return _productService.GetProductByID(id); } }

下面是配置文件中需要注入的代码片断,包括缓存模块和日志模块

 
 
   
     
     
     
     
     
     
     
       
     
   
   
     
     
     
     
   
 
 

好了,对于Unity在DDD中的使用就介绍到这里,如有不清楚的地方,可以直接给我留言或发email!

 

转载于:https://www.cnblogs.com/lori/p/3324177.html

你可能感兴趣的文章
Extjs checkbox数值回显
查看>>
SpringBatch配置数据库
查看>>
SVN使用svn+ssh协议连接服务器时重复提示输入密码 解决办法
查看>>
微信公众平台开发(107) 分享到朋友圈和发送给好友
查看>>
GeoTiff如何存储颜色表的研究
查看>>
Linux进程ID号--Linux进程的管理与调度(三)
查看>>
Xcode 编译错误
查看>>
=、==、is、id(内容)
查看>>
基于MySQL协议的数据库中间层项目Atlas - 360团队
查看>>
20165334《java程序设计》第三周学习总结
查看>>
HTTP请求GET/POST查看工具
查看>>
php实现 坐标移动
查看>>
前端之HTML
查看>>
The Cats' Feeding Spots
查看>>
Python 进阶_OOP 面向对象编程_self 的实例绑定
查看>>
jquery内核学习(5)--对象的遍历
查看>>
在Android迷你广告上添加浮动的关闭按钮
查看>>
2dcontext
查看>>
企业级大数据处理方案-01
查看>>
日期和字符串相互转换的方法
查看>>