我有一个与 Unity 拦截器挂钩的 WCF 服务,并且出于审计目的,对 WCF 层的所有调用都被 Unity 拦截。但是,Unity 似乎拦截了所有调用来解析接口,无论调用来自 WCF 还是内部。
考虑以下代码:
[ServiceContract]
public interface IMyUtilityService
{
[OperationContract]
void DoUtilityStuff();
}
[ServiceContract]
public interface IMyService
{
[OperationContract]
void DoStuff();
}
class MyService : IMyService
{
public MyService(IMyUtilityService myUtilityService)
{
}
public void DoStuff()
{
}
}
服务接口注册到 Unity 并进行拦截:
container.RegisterType<IMyUtilityService, MyUtilityService>(
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<PipelineInterceptor>());
container.RegisterType<IMyService, MyService>(
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<PipelineInterceptor>());
当对 IMyService 进行 WCF 调用时,我会触发拦截器,这很棒,我可以进行一些审核。但是,当 IMyService 被解析时,拦截器会再次触发,因为 IMyUtilityService 被注入到 IMyService 构造函数中。
有没有办法配置 Unity 来防止这种情况?或者拦截器内部有没有办法确定拦截是由WCF直接触发的?还是我需要创建一个不同的接口层来分离外部调用和内部调用?