3

WCF を使用する場合、サービス コントラクトを定義できます。

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    int MyOperation(int x);
}

で servicehost を開いたとしwww.example.com/MyServiceます。クライアントからこのサービスを使用する 1 つの方法は次のとおりです。

IMyService service =
    new ChannelFactory<IMyService>(new BasicHttpBinding(),
        new EndpointAddress("www.example.com/MyService")).CreateChannel();
int result = service.MyOperation(10);

したがって、明示的に行われたことはありませんが、どうにかして をservice実装します。これらの行をデバッグすると、 のインスタンスであるIMyServiceことがわかります。ソースコードからわかるように、そのクラスのコメントはservice__TransparentProxy

透過プロキシは魔法のように呼び出しを表すメッセージを作成し、リアル プロキシに委任して実際のリモート処理を行います。

私にとってこれは確かに「魔法」ですが、論理的な説明が必要だと思います。


ここでのパターンは非常に便利です。私が望むのは、Magic以下のようなクラスです (構文が正しくないことはわかっています。それ以外の場合は、尋ねる必要はありません)。議論のために、このクラスに呼び出されたメソッドの名前を出力させたいとしましょう。

public class Magic<T> : T {
    // don't know what to do here
}

私が電話できるように

IMyService service = new Magic<IMyService>();
service.MyOperation(10);

そして、これは次のように出力されます:

MyOperation

このようなことは可能ですか?(__TransparentProxy似たようなことをするので、そうあるべきです。)もしそうなら、これはどのように機能しますか?

4

2 に答える 2

0

この回答に出くわした他の人は、一般的にアスペクト指向プログラミング(AOP)を見たいと思うかもしれません

そしておそらく PostSharp 特に: https://www.postsharp.net/aop.net

于 2018-08-17T19:11:35.637 に答える