3

私は DynamicProxy クラスの使用を検討していましたが、この概念にはかなり慣れていません。この道を進む前に、これらのクラスが IntelliSense とタイプ セーフでどの程度うまく機能するのか疑問に思っていました。

Castle DynamicProxy (またはその他のもの) のようなものを使用するのが怖いだけで、すべてを設定した後、オブジェクトを使用すると IntelliSense またはタイプ セーフが提供されないことがわかりました。誰でもこれに光を当てることができますか?

4

3 に答える 3

1

DynamicProxy クラスがどのように使用されているか、およびそれらがインテリセンスをサポートしているかどうかについて、率直な答えを探しています。

DynamicProxy クラスがどのように機能するかを説明することで、クラスがタイプ セーフである理由と、インテリセンスとうまく連携できる理由を明確に理解できます。


まず、DynamicProxy が実際に何であるかを理解しましょう。プロキシ クラスは、別のクラスに代わってメンバー呼び出しを処理するクラスです。これは、継承 (最も一般的) または構成によって行われます。したがって、プロキシ クラスを手書きすると、次のようになります。

public class Customer
{
    public virtual string Name { get; set; }
    // etc...
}

public class CustomerProxy : Customer
{
    public override string Name
    {
        get
        {
            // Do additional functionality...

            return base.Name;
        }
        set
        {
            // Do additional functionality...

            base.Name = value;
        }
    }
}

この適切な動作には、継承とポリモーフィズムという 2 つの重要な機能が重要な役割を果たします。したがって、Customerクラスをシームレスに使用するには、 はProxyGenerator単純にクラスのインスタンスを作成しますが、CustomerProxyそれを の型として返しCustomerます。基本的には を行うのと同じことCustomer customer = new CustomerProxy();です。「動的」部分は実際には .NET キーワードとは何の関係もありませんがdynamic、代わりに「ランタイム」と読む必要があります。これは、プロキシ クラスが実行時 (アプリケーションの実行中) ではなく、実行時に生成されることを単に意味するためです。コンパイル時。ああ、これがどのように行われるのか疑問に思っている場合は、次を使用しますSystem.Reflection.Emit


それが a の単純なバージョンDynamicProxyです。これらのプロキシ クラスの作成に関しては、さまざまなフレームワークがさまざまな機能を提供します。たとえば、Castle Windsor の DynamicProxy では、Mixin を作成し、これらのプロキシ クラスに追加のインターフェイスを適用できます。つまり、生成されたプロキシ クラスはpublic class CustomerProxy : Customer, ISomeInterface { ... }Customerクラス自体がISomeInterface. これは、Castle の DynamicProxy の非常に優れたリソースです ( http://kozmic.net/dynamic-proxy-tutorial/ )。さまざまな機能とそれらの機能の使用例について説明します。

于 2013-05-17T13:22:32.720 に答える