gpt4 book ai didi

c# - Unity ICallHandler 与 IInterceptionBehavior

转载 作者:行者123 更新时间:2023-11-30 13:27:01 24 4
gpt4 key购买 nike

Unity 似乎提供了两种不同的途径来实现 AoP 功能。

问题是为什么?有什么区别?每种方法的优缺点是什么?

例如使用 ICallHandler:

unity.Configure<Interception>()
.AddMatchingRule(
new TypeMatchingRule(typeof (ComplexEntity))
).AddMatchingRule(
new TypeMatchingRule(typeof (ComplexEntity.InnerEntity))
).AddMatchingRule(
new MemberNameMatchingRule("*")
).AddCallHandler(
new CallHandler()
);

但是使用 IInterceptionBehavior 代替 ICallHandler 也可以实现类似的功能

unity.RegisterType<ComplexEntity,ComplexEntity>
(new VirtualMethodInterceptor(), new InterceptionBehavior)

还有一个混合的地方可以让你设置拦截但使用调用处理程序,例如。

unity.Configure<Interception>()
.SetInterceptorFor<ComplexEntity>(new VirtualMethodInterceptor())
.AddPolicy("TestPolicy")
.AddMatchingRule(
new TypeMatchingRule(typeof (ComplexEntity))
).AddMatchingRule(
new TypeMatchingRule(typeof (ComplexEntity.InnerEntity))
).AddMatchingRule(
new MemberNameMatchingRule("*")
).AddCallHandler(
new CallHandler()
);

那么使用哪一个呢?为什么在一个框架中会有看似冗余的解决方案?

最佳答案

答案主要是历史性的。在 Unity 存在之前,策略注入(inject)的内容首先出现在 Enterprise Library 3.0 中。需要所有匹配规则的东西,因为没有容器或中心点来连接东西。

当我们开始将拦截集成到 Unity 中时,这给了我们简化事情的机会;策略注入(inject) block 的经验表明,对于很多人来说,PIAB 的经验是多余的。

但是,我们不想任意破坏使用 PIAB 的每个人(我们已经做过几次)所以我们保留了新的、更简单的界面并同时实现了旧界面。

关于c# - Unity ICallHandler 与 IInterceptionBehavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15242613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com