Предположим, у меня есть интерфейс, доступный через WCF:
[ServiceContract]
interface IService
{
[OperationContract]
void Foo();
}
И реализация:
[ServiceBehavior(...)]
class Service : IService
{
public void Foo() { /* impl */ }
}
Я могу опубликовать Service
поверх WCF, и все работает хорошо.
Теперь я хочу использовать Unity для перехвата Service
.Я могу использовать поведения WCF для этого, но к IService
(и Service
, который его реализует) иногда обращаются из внутренних служб, а не через WCF, и мне нужен механизм перехвата, который будет применяться как при обращении к классу через WCF, так икогда к нему обращаются локально.
Я могу использовать для этого InterfaceInterceptor
Unity, но тогда у прокси, который я получу, не будет атрибута ServiceBehavior
, который, очевидно, влияет на поведение WCF и поэтому необходим.
Теперь я могу использовать TransparentProxyInterceptor
или VirtualMethodInterceptor
, которые будут наследовать от моего Service
класса (и, следовательно, наследовать атрибуты?), Но InterfaceInterceptor
выглядит как «правильный» перехватчик для использования вэтот случай.В конце концов, я работаю с интерфейсами.
Глядя на код Unity, кажется, что InterfaceInterceptor
использует Reflection.Emit
для генерации прокси.Если бы он использовал TypeBuilder.SetCustomAttributes
, он мог бы просто скопировать атрибуты из моего исходного типа и применить их к своему прокси.Однако я не смог найти точку расширения Unity для этого.Самый близкий, который я получил, был InterfaceInterceptorClassGenerator
, но он также не раскрывает его TypeBuilder
.
Есть ли простой способ расширить InterfaceInterceptor
для копирования атрибутов из базовой реализации?Есть ли другой способ заставить ServiceBehavior
, указанный в Service
, применить к прокси?