摘要: Unity提供了根据名称空间进行匹配规则的类型NamespaceMatchingRule,它的通配符规则和MemberNameMatchingRule相同。看一个简单的示例: 配置文件如下定义: 阅读全文
posted @ 2012-08-10 11:55 junchu25 阅读(637) 评论(0) 推荐(0) 编辑
摘要: Unity提供了基于成员名称的匹配规则类型MemberNameMatchingRule,允许根据匹配表达式进行注入。看一个简单示例: 上面的示例只有DoWork被调用。MemberNameMatchingRule提供了符号*用来完成剩余部分的匹配,如果只传递*则表示全部。 使用*: 使用后置*: 使 阅读全文
posted @ 2012-08-10 11:53 junchu25 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 在声明式编程流行的今天,对于AOP中许多附加功能我们往往会通过声明一个Attribute更为直观的展示。比如需要添加一个LogHandler,那就定义一个LogSupportAttribute。Unity提供了自定义Attribute的匹配规则类型CustomAttributeMatchingRul 阅读全文
posted @ 2012-08-10 11:49 junchu25 阅读(702) 评论(0) 推荐(0) 编辑
摘要: Unity的拦截策略中提供了程序集匹配规则,我们可以对于属于某个特定程序集的类型附加CallHandler。看一个简单的示例: AssemblyMatchingRule的构造函数允许传递字符或者Assembly信息。上面的示例传递了当前AppDomain入口的EntryAssembly,MyObje 阅读全文
posted @ 2012-08-10 11:46 junchu25 阅读(720) 评论(0) 推荐(0) 编辑
摘要: 在研究Unity的AdditionalInterfaces时候产生一个疑问,假设现有类型的函数名称和一个接口的函数名称相同,通过附加接口后创建的代理类型规范了这一组操作。下面是模拟的定义和调用: 现在通过Intercept的NewInstanceWithAdditionalInterfaces函数为 阅读全文
posted @ 2012-08-10 11:43 junchu25 阅读(355) 评论(0) 推荐(0) 编辑
摘要: Unity提供了PolicyInjectionBehavior用来为一个类型创建时定义拦截的策略,符合特定条件的类型才会被附加特定的功能,当然之前你必须先定义使用的Interceptor。默认规则有:Assembly、CustomAttribute、Member Name、Method Signat 阅读全文
posted @ 2012-08-10 11:43 junchu25 阅读(197) 评论(0) 推荐(0) 编辑
摘要: Unity的拦截技术可以独立使用,你不需要使用Microsoft.Practices.Unity.dll、Microsoft.Practices.Unity.Configuration.dll、Microsoft.Practices.ServiceLocation.dll。而只需要使用Microso 阅读全文
posted @ 2012-08-10 11:41 junchu25 阅读(329) 评论(0) 推荐(0) 编辑
摘要: Unity默认提供了三种拦截器:TransparentProxyInterceptor、InterfaceInterceptor、VirtualMethodInterceptor。 TransparentProxyInterceptor:代理实现基于.NET Remoting技术,它可拦截对象的所有 阅读全文
posted @ 2012-08-10 11:40 junchu25 阅读(2482) 评论(3) 推荐(0) 编辑
摘要: 继续前一篇实现的NotifyPropertyChangedBehavior,如何在配置文件中添加: 默认Unity的配置无法识别interceptor,需要在unity配置节中添加一个sectionExtension,由InterceptionConfigurationExtension处理(Mic 阅读全文
posted @ 2012-08-10 11:38 junchu25 阅读(436) 评论(0) 推荐(0) 编辑
摘要: Unity提供了自带的拦截器,如果你并不想编写繁琐的拦截器可以选择编写更轻量的方式Behavior。拦截器的应用场景有不少,比如一些数据访问框架,它们的核心概念是AOP。通过创建一个继承于类型的代理类型,并重写它的virtual函数将拦截器置入其中。前置处理函数负责打开数据库连接、启动事务,后置处理 阅读全文
posted @ 2012-08-10 11:36 junchu25 阅读(413) 评论(0) 推荐(0) 编辑
摘要: Unity的函数依赖注入和之前提到的构造函数、属性使用相同。InjectionMethodAttribute指定需要注入的函数。 DependencyAttribute可以指定需要依赖注入的注册名称。OptionalDependencyAttribute在没有注册相应类型的时候默认返回null。 阅读全文
posted @ 2012-08-10 11:30 junchu25 阅读(277) 评论(0) 推荐(0) 编辑
摘要: Unity的属性依赖注入不同于构造函数的默认注入,它需要显示为被注入的属性添加DependencyAttribute。 MyObject的MyInterface属性被注入了MyInterfaceImpl,但是MyInterface2属性由于没有DependencyAttribute则不被注入。Uni 阅读全文
posted @ 2012-08-10 11:29 junchu25 阅读(575) 评论(0) 推荐(0) 编辑
摘要: Unity的构造函数依赖注入提供一种默认的行为,在Resolve一个类型实例时完成依赖注入(这个类型并不一定需要注册,但注入类型需要注册)。看一个简单的示例: MyObject的构造函数参数myInterface和myInterface2被注入了MyInterfaceImpl和MyInterface 阅读全文
posted @ 2012-08-10 11:27 junchu25 阅读(351) 评论(0) 推荐(0) 编辑
摘要: Unity默认提供了ContainerControlledLifetimeManager、TransientLifetimeManager、HierarchicalLifetimeManager、PerResolveLifetimeManager、PerThreadLifetimeManager和E 阅读全文
posted @ 2012-08-10 11:24 junchu25 阅读(432) 评论(0) 推荐(0) 编辑
摘要: Unity的Container允许树型的层次结构,比如一个Container下可以有多个子Container,这些Container下也允许有多个子Container。示例如下: 值得注意的是一般情况下父Container的销毁并不影响子Container的使用。 阅读全文
posted @ 2012-08-10 11:21 junchu25 阅读(198) 评论(0) 推荐(0) 编辑
摘要: Unity给出一种延迟创建对象的方案,可以先获取对象的创建器 -> 再注册类型 -> 其余代码 -> 创建类型实例,创建器的类型必须是Func<T>,而不是和Func相同返回值的delegate。看一个简单示例: 由于4.0默认新增了Lazy<T>(3.5可以添加并行库System.Threadin 阅读全文
posted @ 2012-08-10 11:20 junchu25 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 在一些情况下虽然我们抽象了接口或者基类型,但是配置不同的实现可能需要提供不同的初始化值,比如两个实现类型的构造函数参数相同,但一个类型的某个参数会产生变化。在Unity中可以通过ParameterOverride完成(Unity还提供了DependencyOverride、PropertyOverr 阅读全文
posted @ 2012-08-10 11:19 junchu25 阅读(276) 评论(0) 推荐(0) 编辑
摘要: Unity允许在构造一个类型实例时对constructor、property、method进行依赖注入。比如ILogger的实现类型MyLogger有一个属性LogWritter,类型是TextWriter。它依赖一个名为LogWriter的类型注册,ILogger和MyLogger的定义如下: 首 阅读全文
posted @ 2012-08-10 11:17 junchu25 阅读(635) 评论(0) 推荐(0) 编辑
摘要: Unity提供了四个配置节来完成类型示例的创建。使用示例类型如下: 1、lifetime,管理类型实例的生命周期。Unity默认提供了几种实现,比如常用的singleton(单例)、perthread(ThreadStatic)等。 开发人员可以通过继承于LifetimeManager自定义生命周期 阅读全文
posted @ 2012-08-10 11:07 junchu25 阅读(1992) 评论(0) 推荐(0) 编辑
摘要: Unity提供Automatic Type Lookup,你可以在配置节中定义assembly和namespace,比如mscorlib和System: 你可以为类型定义别名,默认Unity为基元类型定义了对应的别名,等同于C#中的关键字。比如System.Int32对应int(下面的int别名可以 阅读全文
posted @ 2012-08-10 10:58 junchu25 阅读(2219) 评论(1) 推荐(1) 编辑