Как заставить перехват на основе [HandlerAttribute] работать на всем по умолчанию в Unity?

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

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

1 ответ

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

Определить 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]s.

Другие вопросы по тегам