Настроить перехват единиц после инициализации контейнера - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть контейнер Unity, настроенный с помощью файла XML.После того, как он настроен, я хочу добавить перехват для определенных типов через код.Как это может быть сделано?У меня следующее поведение:

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using Microsoft.Practices.Unity.InterceptionExtension;
using NLog;

namespace WebDibaelsaMVC.Utils.Behaviors
{
    public class LoggingBehavior : IInterceptionBehavior
    {
        private readonly Logger _log = LogManager.GetLogger("Unity");

        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            var msg = getNext()(input, getNext);
            if (msg.Exception != null)
                _log.ErrorException("Error d'unity.", msg.Exception);
            return msg;
        }

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

        public bool WillExecute
        {
            get
            {
                return true;
            }
        }
    }
}

и я хочу, чтобы все вызовы методов IController типов, которые разрешаются через контейнер, проходили через это поведение.Как я могу это сделать?

1 Ответ

4 голосов
/ 07 апреля 2011

Просто вызовите API конфигурации после загрузки конфигурации. В «времени конфигурации» нет ничего волшебного; правило для Unity - «выигрывает последняя конфигурация». Таким образом, вы можете загружать из XML, делать вещи с API и загружать второй раздел XML, и все они будут загружены вместе.

Если вы используете перехват с MVC, помните, что на самом деле единственный способ заставить его работать правильно - это использовать VirtualMethodInterceptor; использование перехватчика экземпляра также потребовало бы, чтобы вызывающее пользовательское действие работало правильно (поверьте мне, я пробовал).

...