Как заставить перехват на основе [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.