我正在尝试动态创建代理类。我知道有一些非常好的框架可以做到这一点,但这纯粹是一个作为学习练习的宠物项目,所以我想自己做。
例如,如果我有以下类实现一个接口:
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?