プロキシ クラスを動的に作成しようとしています。これを行うための非常に優れたフレームワークがいくつかあることは知っていますが、これは純粋に学習演習としてのお気に入りのプロジェクトであるため、自分でやりたいと考えています。
たとえば、インターフェイスを実装する次のクラスがあるとします。
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 を生成する必要がありますか?