【发布时间】:2014-09-05 20:32:07
【问题描述】:
我想针对特定的基类型向 Unity 声明拦截,并让所有派生类型自动接受该拦截。
我看到两个不同的 SO 帖子是同一主题,但都没有我正在寻找的答案:
-
Microsoft Unity Base Class Interception
这个告诉我我已经知道的;信息还不够。 -
Unity Interception in Derived Classes
这个非常详细,但与 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 使用 AOP 日志记录。
当我执行上述代码时,我的 ReportAttributePolicy 上的任何方法都不会执行。这意味着我没有机会让魔法发生。如果我不处理继承示例,那么一切正常。
如何让它与继承一起工作?
【问题讨论】:
标签: c# inheritance unity-container aop policy-injection