随笔分类 - Unity
摘要:AOP的特性使得它非常适合用来设计类似权限控制的功能,这是本文的基础,如果想要了解AOP的实现,可以参考《动态织入的AOP实现》。 在基于角色的访问控制(RBAC)中,有三要素:用户、角色、任务(或操作)(User、Role、Task),其稳定性逐渐增强,两个关系,User<->Role、Role<->Task,其中: User 是日常管理运行时建立 Role 是部署/交付建立 ...
阅读全文
摘要:动态织入的AOP实现,有两种方法:第一类,借助于Remoting命名空间下的几个类,通过获取当前上下文及反射的机制来实现,这需要被AOP的类需要继承自arshalByRefObject或者ContextBoundObject;第二类,原理是基于动态代理的思想,即在运行时动态构造一个原有类的子类,这样就可以在子类的重载方法中插入额外代码。这两类方法,都有显著的不足,前者直接要求我们继承固定类,后者呢,除非父类方法被定义为virtual,或者方法定义于某个接口,否则就不能被重载,这就是得“拦截”并不是可以对任意的方法进行的。动态织入局限于CLR的限制,不能实现对任何方法进行AOP,如果要突破这个限
阅读全文
摘要:一:领域驱动中的分层领域驱动设计将软件系统分为四层:基础结构层、领域层、应用层和表现层。· 基础结构层:该层专为其它各层提供技术框架支持。注意,这部分内容不会涉及任何业务知识。众所周知的数据访问的内容,也被放在了该层当中,因为数据的读写是业务无关的。· 领域层:包含了业务所涉及的领域对象(实体、值对象)、领域服务以及它们之间的关系。这部分内容的具体表现形式就是领域模型(Domain Model)。领域驱动设计提倡富领域模型,即尽量将业务逻辑归属到领域对象上,实在无法归属的部分则以领域服务的形式进行定义。· 应用层:该层不包含任何领域逻辑,但它会对任务进行协调,并可
阅读全文
摘要:一:第一类需求接口和类定义如下: public interface ISample<T> {} public class Sample : ISample<SomeClass2> {} public class SomeClass2{}要求用Unity注入。1:运行时注入如果是运行时注入,可如下编码: using (IUnityContainer container = new UnityContainer()) { ConfigurationManager.Get...
阅读全文
摘要:基于以下的理由,ViewModel也是需要多个,并且需要被注入的:1:设计时和运行时需要为View提供不同的数据简单来说,就是设计时需要模拟数据。界面设计开发人员需要进行绑定(包括支持Expression Blend绑定)做一些简单的处理,同时因为提供了模拟数据,UI人员可以更好的设计实际的界面。2:为了方便单元测试在运行时,大部分情况下,ViewModel会组合进提供Service的业务类。在简单的应用中,我们可以注入Service类的MOCK来进行单元测试,如果是这样,就可以避免提供多个ViewModel。但在有些应用中,如Silverlight应用中,服务由WerbService、WCF
阅读全文
摘要:上篇讲到了3种注入的方式,注入的对象都是由Unity为我们自动创建的。有时候我们需要注入已经存在的对象。 代码如下: //使用已有实例注入 ISomeBiz someBiz = container.Resolve<ISomeBiz>("ConfigBiz"); someBiz.SomeInt = 101; IClass class11 = container.Resolve<IClass>("Co...
阅读全文
摘要:1:本篇基于如下的场景a:主项目只和接口项目相关,如下:也即,ConsoleApplication1只和IBiz和IDal相关。顺便说一下,为了演示注入,IDal要用到IBiz项目。b:类结构如下:SampleClass1,SampleClass2,SampleClass3,都继承自IClass其中SampleClass1构造器依赖注入ISomeBiz的一个实例,其中SampleClass2属性依赖注入ISomeBiz的一个实例,其中SampleClass3方法依赖注入ISomeBiz的一个实例。c:用配置文件实现2:主要的类两个接口,一个是在IDal项目下的IClass: public in
阅读全文
摘要:Unity属于微软企业库的一部分,你可以到http://entlib.codeplex.com/去下载企业库并安装。为了介绍Unity,应该首先明白两个概念(见[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity?)。1、IOC(Inversion of Control )——反转控制,根据其字面意思我们就可以知道就是将控制权反转出去。在我们以往开发代码的过程中每一层都紧紧地联系在一起,一层依赖一层,如果一层发生了变化那就会导致其他层也发生连锁反应,例如:业务逻辑层(BLL)依赖于数据访问层(DAL),一般都是直接创建数据访问层
阅读全文