我想爲Unity聲明對特定基類型的攔截,並且自動爲所有派生類型聲明攔截。從基類中的統一攔截
我看到了兩個不同的,所以帖子說是相同的話題,但也有我在尋找答案:
- 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");
}
}
[報告]註釋是我自己的自定義屬性 - 它表明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
派生,我想解決的類型與AOP測井儀器進行,根據我的ReportAttributePolicy
。
當我執行上面的代碼時,我的ReportAttributePolicy上的方法都沒有執行。這意味着我沒有機會發生奇蹟。如果我不處理繼承的例子,那麼它一切正常。
如何使它繼承工作?