定义申明
public interface MyInterface
{
void Do();
int Add(int x, int y);
}
实现申明
using System;
public class MyImplement : MyInterface
{
public int Add(int x, int y)
{
Console.WriteLine("执行Add");
return x + y;
}
public void Do()
{
Console.WriteLine("执行Do");
}
}
定义代理应该含有的东西
public interface IProxy
{
object ImplementInstance { get; set; }
}
实现代理
using System;
using System.Reflection;
public class MyProxy : DispatchProxy, IProxy
{
public object ImplementInstance { get; set; }
public TInterface CreateProxy<TInterface, TImplement>()
where TImplement : class, TInterface, new()
{
return this.CreateProxy<TInterface, TImplement, MyProxy>();
}
public TInterface CreateProxy<TInterface, TImplement, TProxy>()
where TProxy : DispatchProxy, IProxy
where TImplement : class, TInterface, new()
{
return this.CreateProxy<TInterface, TImplement, TProxy>(Activator.CreateInstance<TImplement>());
}
public TInterface CreateProxy<TInterface, TImplement, TProxy>(TImplement implement)
where TProxy : DispatchProxy, IProxy
where TImplement : class, TInterface
{
TInterface @interface = DispatchProxy.Create<TInterface, TProxy>();
(@interface as IProxy).ImplementInstance = implement;
return @interface;
}
protected override object Invoke(MethodInfo targetMethod, object[] args)
{
Console.WriteLine("执行前");
object result = targetMethod.Invoke(this.ImplementInstance, args);
Console.WriteLine("执行后");
return result;
}
}
使用动态代理
class Program
{
static void Main(string[] args)
{
MyProxy myProxy = new MyProxy();
MyInterface myInterface = myProxy.CreateProxy<MyInterface, MyImplement>();
myInterface.Do();
int z = myInterface.Add(1, 1);
}
}
网友评论