Как заставить перехват на основе [HandlerAttribute] работать на всем по умолчанию в Unity? - PullRequest
1 голос
/ 15 ноября 2011

Я хочу использовать перехват на основе [HandlerAttribute] в своем проекте (потому что он немного более очевиден для новых разработчиков). Однако я не могу заставить его работать, если я явно не укажу new InterceptionBehavior<PolicyInjectionBehavior>() в RegisterType.

Есть ли простой способ включить [HandlerAttribute] обнаружение на всем, не загрязняя RegisterType звонки?

1 Ответ

1 голос
/ 23 февраля 2012

Я думаю, что следующее должно достичь того, что вы хотите

Определите UnityContainerExtension примерно так:

public class InterceptionExtension : UnityContainerExtension
{
    protected override void Initialize()
    {
        Context.Registering += OnRegister;
        Context.RegisteringInstance += OnRegisterInstance;
    }

    public override void Remove()
    {
        Context.Registering -= OnRegister;
        Context.RegisteringInstance -= OnRegisterInstance;
    }

    private void OnRegister(object sender, RegisterEventArgs e)
    {
        Container.Configure<Interception>()
            .SetInterceptorFor(e.TypeTo, new VirtualMethodInterceptor());
    }

    private void OnRegisterInstance(object sender, RegisterInstanceEventArgs e)
    {
        Container.Configure<Interception>()
            .SetInterceptorFor(e.RegisteredType, new VirtualMethodInterceptor());
    }
}

Добавьте это в контейнер:

_container.AddNewExtension<InterceptionExtension>();

Затем для каждого зарегистрированного типа следует настроить Interception для применения к виртуальным членам. Это должно затем поднять на любой прикладной [HandlerAttribute] с.

...