日期:2014-05-20  浏览次数:20896 次

请教unity1.2的aop配置
如题,我在网上搜的例子都是在类的方法上增加标记,一定程度上降低了程序的灵活性.

class Program
{
    static void Main(string[] args)
    {
        var container1 = new UnityContainer().AddNewExtension<Interception>().RegisterType<IOutput, OutputImplement1>();//声明UnityContainer并注册IOutput   
        container1.Configure<Interception>().SetInterceptorFor<IOutput>(new InterfaceInterceptor());
        IOutput op1 = container1.Resolve<IOutput>();
        op1.Output(11);//调用
        Console.ReadLine();
    }
}
public interface IOutput
{
    void Output(int x);
}
[MyHandler]
public class OutputImplement1 : IOutput
{
    public void Output(int x)
    {
        Console.WriteLine("执行此方法输出:{0}", x);
        throw new Exception("这里抛个异常出来");
    }
}
public class MyHandler : ICallHandler
{
    public int Order { get; set; }//这是ICallHandler的成员,表示执行顺序   
    public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
    {
        //这之前插入方法执行前的处理  
        Console.WriteLine("执行前");
        IMethodReturn retvalue = getNext()(input, getNext);//在这里执行方法  
        if (retvalue.Exception == null) // retvalue.Exception=null说明函数执行时没有抛出异常
        {
            Console.WriteLine("执行成功,无异常");
        }
        else
        {
            Console.WriteLine("Exxxxxx:" + retvalue.Exception.Message);
            retvalue.Exception = null; // 将retvalue.Exception设为null表示异常已经被处理过了,
                                       // 如果不把retvalue.Exception设为null,Unity会再次抛出此异常。
        }
        //这之后插入方法执行后的处理  
        Console.WriteLine("完成");
        return retvalue;
    }
}
public class MyHandlerAttribute : HandlerAttribute
{
    public override ICallHandler CreateHandler(IUnityContainer container)
    {
        return new MyHandler();//返回MyHandler   
    }
}
=======================================================================================
能否使用配置代替[MyHandler]标记...