Как перехватить метод родительского класса, разрешив производный класс?

Ниже представлен мой родительский класс

public class Parent
{
  //This method is intercept-able using **VirtualMethodInterceptor**
  public virtual void Test()
  {
    //Do something
  }
 }

Ниже мой дочерний класс

public class Child:Parent
{
 // This method directly not intercept-able but it calls base.Test() where   Test    is an intercept-able method
 public void Demo(){
   base.Test();
 }
}

Теперь я хочу разрешить экземпляр класса Child с помощью Unity, где метод Demo будет перехватываемым. На самом деле метод Demo не может быть перехвачен, потому что он не виртуальный, но этот метод внутренне вызывает base.Test(), где Test может быть перехвачен. Так как же разрешить перехватываемый экземпляр класса Child?

Это не работает, если я зарегистрирую дочерний класс в контейнере единства, как показано ниже

    container.RegisterType<Child>(
            new Interceptor<VirtualMethodInterceptor>(),
            new InterceptionBehavior<Interceptor>()
            )

person shou    schedule 02.11.2015    source источник


Ответы (1)


Убедитесь, что вы сделали следующее:

1) Вы добавили расширение Interception следующим образом:

container.AddNewExtension<Interception>();

2) Свойство WillExecute вашего класса поведения перехвата возвращает true.

3) Вы получаете экземпляр Child из контейнера. Это можно сделать прямо так:

Child chlid = container.Resolve<Child>();

Или иметь Child в качестве зависимости для некоторого класса, а затем разрешать граф объектов, содержащий этот класс, с помощью контейнера.

person Yacoub Massad    schedule 02.11.2015
comment
Хотя все вышеперечисленное уже есть в моих кодах, но в любом случае спасибо за ваше предложение. Сначала я хочу разрешить дочерний экземпляр, который в порядке, как указано выше. Теперь, если я вызываю метод Demo() с использованием дочернего экземпляра, тогда метод Test() должен быть перехвачен, поскольку Demo() внутренне вызывает Test(), а Test() является виртуальным методом, поэтому он должен быть перехвачен поведением VirtualMethodInterceptor. - person shou; 03.11.2015
comment
Я проверил ваш сценарий, и он работает на моей машине. Можете ли вы поделиться более полным кодом? - person Yacoub Massad; 03.11.2015