У меня есть служба WCF, подключенная к перехватчику Unity, и все вызовы уровня 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>());
Когда вызов WCF выполняется в IMyService, я получаю срабатывание перехватчика, что здорово, и я могу провести некоторый аудит. Однако при разрешении IMyService перехватчик снова срабатывает, поскольку IMyUtilityService внедряется в конструктор IMyService.
Есть ли способ настроить Unity, чтобы предотвратить это? Или внутри перехватчика есть способ определить, что перехват был непосредственно запущен WCF? Или мне нужно создать другой слой интерфейса для разделения внешних и внутренних вызовов?