Конфигурация перехвата / регистрации на основе кода для Unity - PullRequest
3 голосов
/ 26 мая 2011

Я использую Unity в качестве контейнера IoC, который пока работает нормально.Теперь я хотел бы использовать перехват с TypeMatchingRule и LogCallHandler для регистрации всех вызовов интерфейса IMyInterface.Я настраиваю единство с помощью кода, но не могу заставить регистрацию работать.Может ли кто-нибудь указать мне на простой пример?Я нашел несколько небольших фрагментов в документации, но я не могу собрать рабочую конфигурацию для моего варианта использования.Похоже, я скучаю по большой картине!?

Ответы [ 2 ]

4 голосов
/ 31 мая 2011

Прежде всего, сделайте поведение.Вот пример:

public class MyLoggerBehavior : IInterceptionBehavior
  {
    public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
    {
      var returnValue = getNext()(input, getNext);

      if (returnValue.Exception != null)
      {
        Global.Logger.TraceException("Exception intercepted", returnValue.Exception);
      }
      else
      {
        Global.Logger.Trace("Method {0} returned {1}", input.MethodBase, returnValue.ReturnValue);
      }
      return returnValue;
    }

    public IEnumerable<Type> GetRequiredInterfaces()
    {
      return new Type[0];
    }

    public bool WillExecute
    {
      get { return Global.Logger.IsTraceEnabled; }
    }
  }

, затем зарегистрируйте его:

Container
        .AddNewExtension<Interception>()
        .RegisterType<IDao, NhDao>(new Interceptor(new InterfaceInterceptor()),
                new InterceptionBehavior(new MyLoggerBehavior())
        );

Он будет отслеживать каждый вызов в логгере

0 голосов
/ 17 июня 2011

Если вы хотите добавить обработчик вызовов для регистрации перехвата, вам нужно сделать что-то вроде этого (я попытался сделать имена переменных самоочевидными):

...