假设我有一个通过 WCF 公开的接口:
[ServiceContract]
interface IService
{
[OperationContract]
void Foo();
}
和一个实现:
[ServiceBehavior(...)]
class Service : IService
{
public void Foo() { /* impl */ }
}
我可以Service
通过 WCF 发布,一切正常。
现在,我想用 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
应用于代理?