Позволяет рассматривают некоторые случаи:
_windsor.Register(Component.For<IProductServices>().ImplementedBy<ProductServices>().Interceptors(typeof(SomeInterceptorType));
В этом случае, когда я прошу IProductServices, Виндзор проксирует интерфейс для прерывания вызовов метода интерфейса. Если вместо этого я делаю это:
_windsor.Register(Component.For<ProductServices>().Interceptors(typeof(SomeInterceptorType));
затем я не могу попросить Виндзор разрешать IProductServices, вместо этого я прошу ProductServices, и он возвратит динамический подкласс, который прервет виртуальные вызовы метода. Конечно, динамический подкласс все еще реализует 'IProductServices'
Мой вопрос: я могу зарегистрировать Интерфейсный компонент как первый случай и получить прокси подкласса как во втором случае?.
Существует две причины для меня желающий это:
1 - Поскольку код, который собирается решить, не может знать о классе ProductServices, только об интерфейсе IProductServices. 2 - поскольку некоторые вызовы события, которые передают отправителя в качестве параметра, передадут объект ProductServices, и в первом случае этот объект является полем на динамическом прокси, не реальным объектом, возвращенным Виндзором. Позвольте мне дать пример того, как это может усложнить вещи: Позволяет говорят, что у меня есть пользовательский набор, который делает что-то, когда их объекты уведомляют изменение свойства:
private void ItemChanged(object sender, PropertyChangedEventArgs e)
{
int senderIndex = IndexOf(sender);
SomeActionOnItemIndex(senderIndex);
}
Этот код перестанет работать, если я добавил интерфейсный прокси, потому что отправитель будет полем в интерфейсном прокси, и IndexOf (отправитель) возвратится-1.
Да, вы можете:
_windsor.Register(Component.For<ProductServices, IProductServices>()
.Interceptors(typeof(SomeInterceptorType));