我想动态地创建一个代理类。我知道有一些非常好的框架可以做到这一点,但这纯粹是一个作为学习练习的宠物项目,所以我想自己做。动态创建一个代理类
如果,例如,我有下面的类实现一个接口:
interface IMyInterface
{
void MyProcedure();
}
class MyClass : IMyInterface
{
void MyProcedure()
{
Console.WriteLine("Hello World");
}
}
要拦截的方法来这个班,以记录他们,我创建了另一个类(我的版本的代理类)它实现相同的接口,但包含对“真实”类的引用。这个类执行一个动作(例如记录),然后在真实的类上调用相同的方法。
例如:
class ProxyClass : IMyInterface
{
private IMyInterface RealClass { get; set; }
void MyProcedure()
{
// Log the call
Console.WriteLine("Logging..");
// Call the 'real' method
RealClass.MyProcedure();
}
}
主叫然后调用代理类的所有方法,而不是(我使用的是基本的家庭酿造IoC容器注入代替真实类的代理类)。我正在使用这种方法,因为我希望能够在运行时将RealClass
替换为实现相同接口的另一个类。
有没有办法在运行时创建ProxyClass
并填充RealClass
属性,以便它可以用作真实类的代理?有没有一个简单的方法来做到这一点,或者我需要使用像Reflection.Emit
这样的东西并生成MSIL?
你是什么意思动态生成?你的意思是你有一个Type对象并且想实例化这种类型的对象吗? – JJ15k
是的。我想在运行时从IMyInterface创建一个ProxyClass实例,使用对真实类的引用填充其'RealClass'属性,以便它可以用于截取对真实类的所有调用。我将编辑该问题以澄清谢谢。 –
查看Castle的DynamicProxy http://www.castleproject.org/projects/dynamicproxy/ –