В замке Windsor я могу зарегистрировать Интерфейсный компонент и получить прокси реализации?

Позволяет рассматривают некоторые случаи:

_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.

5
задан Thiago de Arruda 1 May 2010 в 20:12
поделиться

1 ответ

Да, вы можете:

_windsor.Register(Component.For<ProductServices, IProductServices>()
   .Interceptors(typeof(SomeInterceptorType));
5
ответ дан 14 December 2019 в 19:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: