WCF 経由で公開されているインターフェイスがあるとします。
[ServiceContract]
interface IService
{
[OperationContract]
void Foo();
}
そして実装:
[ServiceBehavior(...)]
class Service : IService
{
public void Foo() { /* impl */ }
}
私は WCF 経由で公開できService、すべてがうまく機能します。
ここで、Unity を使用して の傍受を実行したいと考えていますService。そのためにWCFの動作を使用できますが、IService(およびServiceそれを実装する)WCF経由ではなく内部サービスによってアクセスされる場合があり、WCF経由でクラスにアクセスするときとローカルにアクセスするときの両方に適用される傍受メカニズムが必要です。
これにはUnityを使用できますInterfaceInterceptorが、取得したプロキシにはServiceBehavior属性がありません。これは明らかにWCFの動作に影響するため、必要です。
これで、クラスから継承する(したがって、属性を継承する) TransparentProxyInterceptororを使用できますが、この場合に使用する「正しい」インターセプターのように思えます。結局のところ、私はここでインターフェースを扱っています。VirtualMethodInterceptorServiceInterfaceInterceptor
Unity のコードを見ると、プロキシの生成にInterfaceInterceptor使用されているようです。Reflection.Emitのみを使用TypeBuilder.SetCustomAttributesした場合、元のタイプから属性をコピーして、プロキシに適用するだけで済みます。ただし、これを行うための Unity 拡張ポイントが見つかりませんでした。私が得た最も近いものは でしたInterfaceInterceptorClassGeneratorが、それも公開されていませんTypeBuilder。
を拡張しInterfaceInterceptorて、基になる実装から属性をコピーする簡単な方法はありますか? プロキシに適用するためにServiceBehavior指定されたものを取得する別の方法はありますか?Service