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の動作に影響するため、必要です。
これで、クラスから継承する(したがって、属性を継承する) TransparentProxyInterceptor
orを使用できますが、この場合に使用する「正しい」インターセプターのように思えます。結局のところ、私はここでインターフェースを扱っています。VirtualMethodInterceptor
Service
InterfaceInterceptor
Unity のコードを見ると、プロキシの生成にInterfaceInterceptor
使用されているようです。Reflection.Emit
のみを使用TypeBuilder.SetCustomAttributes
した場合、元のタイプから属性をコピーして、プロキシに適用するだけで済みます。ただし、これを行うための Unity 拡張ポイントが見つかりませんでした。私が得た最も近いものは でしたInterfaceInterceptorClassGenerator
が、それも公開されていませんTypeBuilder
。
を拡張しInterfaceInterceptor
て、基になる実装から属性をコピーする簡単な方法はありますか? プロキシに適用するためにServiceBehavior
指定されたものを取得する別の方法はありますか?Service