5

インターフェイスがある場合:

public interface ISomething
{
    void DoAThing();
}

次に、ChannelFactory でインスタンス化します。

var channel = new ChannelFactory<ISomething>().CreateChannel

使用できるインスタンスを取得します。

今、それを閉じるには、キャストする必要があります:

((IClientChannel)channel).Close

また

((IChannel)channel).Close

また

((ICommunicationObject)channel).Close

私のISomethingインターフェイスは、これらのインターフェイスを継承していません。

では、 CreateChannelメソッドはどのような種類のオブジェクトを返し、実行時までわからなかったインターフェイスを実装できる動的オブジェクトをどのように構築したのでしょうか?

4

1 に答える 1

2

ChannelFactory.CreateChannel()はRealProxyの実装を返します。これは通常、TransparentProxy または "Remoting" と呼ばれる一連のツールの一部であり、wcf よりも少し古い技術です。インターフェイスを実装する実際のクラスを作成するために、RemotingServices .CreateTransparentProxy(...)と呼ばれる内部フレームワーク レベルのメソッドに行き着きます。 .

あなたが尋ねているように、あなたは自分でこのようなことをしたいかもしれません。実行時にインターフェースを実装するには、あまり手間をかけずにインターフェースまたは抽象クラスを実装するCastle Dynamic Proxyをお勧めします。

于 2013-10-18T16:06:12.950 に答える