如题,我在网上搜的例子都是在类的方法上增加标记,一定程度上降低了程序的灵活性.
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]标记...