如何让基于 [HandlerAttribute] 的拦截在 Unity 中默认对所有内容起作用?

发布于 2024-12-15 11:44:02 字数 317 浏览 1 评论 0原文

我想在我的项目中使用基于 [HandlerAttribute] 的拦截(因为它对于新开发人员来说稍微更明显)。但是,除非我在 RegisterType 中显式指定 new InterceptionBehavior(),否则我无法让它工作。

有没有一种简单的方法可以在不污染 RegisterType 调用的情况下对所有内容启用 [HandlerAttribute] 检测?

I want to use [HandlerAttribute]-based interception in my project (because it is slightly more obvious to the new developers). However I can't get it to work unless I explicitly specify new InterceptionBehavior<PolicyInjectionBehavior>() in RegisterType.

Is there an easy way to enable [HandlerAttribute] detection on everything without polluting RegisterType calls?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名的好友 2024-12-22 11:44:02

我认为以下应该实现您想要的

定义一个 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]

I think the following should achieve what you're after

Define a UnityContainerExtension like so:

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());
    }
}

Add this to the container:

_container.AddNewExtension<InterceptionExtension>();

Then for every registered type, this should configure Interception to apply on virtual members. This should then pick up on any applied [HandlerAttribute]s.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文