文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用Unity2.0 配置文件和特性的配合快速完成方法的注入

使用Unity2.0 配置文件和特性的配合快速完成方法的注入

时间:2011-02-22  来源:luckbird

我其实就是想实现通过在方法前面加一个特性来实现方法的接管,统一处理缓存的功能。

因为必须用Unity,并且要在配置文件中配置各个类的信息。但在网上没有找到类似的例子,所以研究了好久,其实方法很简单。现将研究结果放在这里,备忘一下。


配置文件: 

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3 
 4   <configSections>
 5     <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
 6   </configSections>
 7 
 8   <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
 9     
10     <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension,Microsoft.Practices.Unity.Interception.Configuration" />
11 
12     <assembly name="Test" />
13     <namespace name="Test" />
14 
15     <alias alias="Validation" type="Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.Unity.ValidationBlockExtension,Microsoft.Practices.EnterpriseLibrary.Validation"/>
16 
17     <container>
18 
19       <extension type="Interception" />
20       <extension type="Validation" />
21 
22       <register type="ClassA">
23         <interceptor type="TransparentProxyInterceptor" />
24         <policyInjection />
25       </register>
26 
27     </container>
28 
29   </unity>
30 
31 </configuration>

 

 

 第10,23,24行是重点,必须有这些配置,在用UnityContainer的Reslove方法创建类时,类中加了特性的方法才会被接管。

在ClassA中需要缓存的方法前用这样的特性标注一下,即可实现方法结果缓存,需要自己写CachingCallHandlerAttribute类,我是从网上这里抄的


[CachingCallHandler]         public DateTime Deposit(decimal abc)
        {
            return DateTime.Now;
        }

 

 

 

 第15,20行是为了支持Validation验证需要的配置,加了这个配置才可以像下面使用验证功能。因为这是一个测试项目,这里的验证目前只会导致抛出异常,实际应用时应该再加上异常的处理或日志记录等。这些都可以通过方法接管来统一处理。

        [ValidationCallHandler]
        public int Deposit([RangeValidator(typeof(Decimal), "0.0", RangeBoundaryType.Exclusive, "0.0", RangeBoundaryType.Ignore, MessageTemplate = "存款金额必须大于零")]decimal depositAmount)
        {
            return 0;
        }

 

 

 当然项目还要添加Enterprise Library相关的DLL,如果使用Enterprise Library的缓存管理模块,还要在app.config配置文件中加入缓存的配置信息。


 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载