好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Unity使用案例(文件配置)

Unity使用案例(文件配置)

Unity使用案例(文件配置)

untiy 从nuget上下载

项目为简单三层架构。 接口--业务逻辑层--数据访问层--数据实体层。

接口定义 业务层和数据访问层 接口。

需求实现使用Unity 能够集成异常管理

一、介绍一下业务逻辑

  客户端 调用bll.GetList();获取后台数据。bll中调用的是dal.GetList();

  我们希望在 调用GetList 系统能够自动处理异常。不要再在每个方法中都去写

  try{}catch{}。这样很麻烦业务逻辑也显得臃肿。

二、定义异常标签,异常处理handler

  要想解决以上问题,可以用Unity的拦截机制这样做,定义异常特性或者叫属性

?

namespace   Common

{

     public   class   ExceptionExpandAttribute : HandlerAttribute

     {

         public   int   ID { get ; set ; }

 

         // 摘要:

         //     Derived classes implement this method. When called, it creates a new call

         //     handler as specified in the attribute configuration.

         //

         // 参数:

         //   container:

         //     The Microsoft.Practices.Unity.IUnityContainer to use when creating handlers,

         //     if necessary.

         //

         // 返回结果:

         //     A new call handler object.

         public   override   ICallHandler CreateHandler(IUnityContainer container)

         {

             var handler = container.Resolve<ExceptionHandler>();

             handler.Order = this .Order;

             handler.ID = ID;

             return   handler;

         }

     }

}

  建立异常处理handler

?

public   class   ExceptionHandler:ICallHandler

     {

         public   int   Order { get ; set ; }

         public   int   ID { get ; set ; }

 

         public   IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)

         {

             if   (ID == 100)

                 throw   new   Exception( "AOP异常处理出现异常:Dal出现异常" );

             var methodReturn = getNext().Invoke(input, getNext);

             if   (methodReturn.Exception != null )

                 throw   new   Exception( "AOP异常处理出现异常" , methodReturn.Exception);

              

             return   methodReturn;

         }

     }

 实现ICallHandler的 Invoke 方法,input 能够截获到调用方法传入的参数,getNext().Invoke(input, getNext); 能够得到返回值。我们在

getNext().Invoke(input, getNext);此方法执行后可以截获异常,并进行封装,这里简写。

给要进行异常处理的方法加上标签

?

public   interface   IBll

     {

         [ExceptionExpand(Order=1,ID=10)]

         List<QueryModel> GetList();

     }

public   interface   IDal

     {

         [ExceptionExpand(Order = 1, ID = 100)]

         List<QueryModel> GetList();

     }

  

然后,前台在配置文件中配置各个对象

三、配置文件配置

  

?

   <unity xmlns= " http://schemas.microsoft.com/practices/2010/unity " >

   <sectionExtension type= "Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration"   />

    

     <alias alias= "IBll"   type= "InterfaceDefined.IBll,InterfaceDefined"   />

     <alias alias= "IDal"   type= "InterfaceDefined.IDal,InterfaceDefined"   />

      

     <container>

     <extension type= "Interception"   />

 

     <register type= "IBll"   mapTo= "BusinessEntiy.Bll,BusinessEntiy"   >

       <constructor>

         <param name= "Name"   value= "nihao"   />

       </constructor>

 

       <interceptor type= "TransparentProxyInterceptor"   />

       <policyInjection />

 

     </register>

 

     <register type= "IDal"   mapTo= "DataAccess.Dal,DataAccess"   >

       <interceptor type= "TransparentProxyInterceptor"   />

       <policyInjection />

     </register>

    </container>

</unity>

  很简单指定注册类,指定类初始化参数,interceptor类型使用TransparentProxyInterceptor

测试:

  

  其他日志,缓存大同小异,写的简单,好理解。

 

 

 

标签:  Unity 拦截

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Unity使用案例(文件配置)的详细内容...

  阅读:53次