代碼以下ide
//使用說明 //1,新加接口與類 //2,新加類並實現ICallHandler類: ExecuteHandler //3,新建特性並實現HandlerAttribute和重寫其中的CreateHandler方法:ExecuteAttribute //4,在接口上使用ExecuteAttribute特性 //5,在調用以前應設置攔截類,沒有第二句代碼,方法不會進入到ExecuteHandler.Invoke方法中 // var container1 = new UnityContainer().AddNewExtension<Interception>().RegisterType<Interface1, Class1>(); // container1.Configure<Interception>().SetInterceptorFor<Interface1>(new InterfaceInterceptor()); //6,調用 //注:第5,6說的就是 Main裏面的方法。 using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.InterceptionExtension; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { var container1 = new UnityContainer().AddNewExtension<Interception>().RegisterType<Interface1, Class1>(); container1.Configure<Interception>().SetInterceptorFor<Interface1>(new InterfaceInterceptor()); var sample1 = container1.Resolve<Interface1>(); sample1.Add(); Console.ReadLine(); } } [Execute] public interface Interface1 { void Add(); void Delete(); } public class Class1:Interface1 { public void Add() { Console.WriteLine("Add成功!"); } public void Delete() { Console.WriteLine("Delete成功!"); } } public class ExecuteHandler : ICallHandler { public int Order { get; set; } public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { //getNext()(input,getNext)就是具體的執行方法。在這以前或以後你能夠作一些其它事情,如記錄日誌,判斷是否有權限操做之類的。 var retvalue = getNext()(input, getNext); return retvalue; } } public class ExecuteAttribute : HandlerAttribute { public override ICallHandler CreateHandler(Microsoft.Practices.Unity.IUnityContainer container) { return new ExecuteHandler(); } } }
代碼下載spa