我想为特定的基类型向 Unity 声明拦截,并自动为所有派生类型遵守该拦截。
我看到两个不同的 SO 帖子是相同的主题,但都没有我正在寻找的答案:
- Microsoft Unity Base Class Interception
这个告诉我我已经知道的;它仍然没有足够的信息。 - 派生类中的 Unity 拦截
这一篇非常详细,但与 Unity 配置有关,而不是我使用的命令式形式。
所以我想展示我拥有的代码,看看我是否可以获得特定于我的场景的答案。
我有这些课程:
public abstract class RootController
{
[Report]
public abstract void Action();
}
public class MyController
{
public void Action()
{
Console.WriteLine("hey");
}
}
[Report] 注释是我自己的自定义属性 - 它表明 AOP 日志记录应该应用于该方法。我安排它与基于策略的拦截一起使用,如下所示:
container.AddNewExtension<Interception>();
container.RegisterInstance<InjectionPolicy>(typeof(ReportAttributePolicy).AssemblyQualifiedName, new ReportAttributePolicy());
container.RegisterType<RootController>(
new Interceptor<VirtualMethodInterceptor>(),
new InterceptionBehavior<PolicyInjectionBehavior>()
);
这ReportAttributePolicy
是我的自定义版本AttributeDrivenPolicy
。有关详细信息,请参阅我的Unity Interception博客文章。
显然,我正在尝试制作的场景是这样的:
var yup = container.Resolve<MyController>();
即使请求的类型仅派生自RootController
,我也希望解析的类型能够根据我的ReportAttributePolicy
.
当我执行上面的代码时,我的 ReportAttributePolicy 上的任何方法都没有被执行。这意味着我没有机会让魔法发生。如果我不处理继承示例,那么一切正常。
我如何使它与继承一起工作?