プロキシクラスを動的に作成しようとしています。私はこれを行うためのいくつかの非常に良いフレームワークがあることを知っているが、これは純粋に学習の練習としてペットプロジェクトですので、自分でそれをやりたいです。動的にプロキシクラスを作成する
例えば、私はインターフェイスを実装する次のクラスを持ち、場合:
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'プロパティに実クラスへの参照を移入して、実クラスへのすべての呼び出しを傍受するために使用できるようにしたいと考えています。質問を編集していただきありがとうございます。 –
城のDynamicProxyを参照してくださいhttp://www.castleproject.org/projects/dynamicproxy/ –