簡體   English   中英

城堡溫莎攔截器沒有接口?

[英]Castle Windsor Interceptor w/o Interface?

使用Castle Windsor作為DI,我有兩個實現相同接口的類; 除此之外,還有一些自己的方法和屬性。 我正在使用Castle DynamicProxy並創建了一個Interceptor,它將通過Castle.Facilities.LoggingLoggingFacility對Log4Net進行一些日志記錄。

當調用該方法時,日志文件會整齊地記錄通過接口實現的每個方法。 在下面的示例代碼中,方法Foo()在被調用時被記錄,但方法LogMeToo()沒有,因為它不是IFoo實現的一部分。

我希望在調用時也可以記錄其他未實現接口的方法 這是可能的,如果是這樣的話:怎么樣?

public interface IFoo
{
  void Bar();
}
[Interceptor(typeof(LoggingInterceptor))] public class Foo : IFoo { public void Bar() { // Do Something }
public void LogMeToo() { // Do Something } }
public static class Program { [STAThread] public static void Start() { var container = new WindsorContainer();
container.Register(Component.For<LoggingInterceptor>().LifeStyle.Transient); container.Register(Component.For<IFoo>().ImplementedBy<Foo>());
container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.Log4net).WithConfig("Log4net.config")); } }
WPF C#4.0

不,除非您將方法設為虛擬並將類作為(第一個)服務公開,以便生成類代理,否則它是不可能的。 然而,這聞起來像抽象的破碎。 如果您將Foo暴露為IFoo那么LogMeToo都不會調用LogMeToo - 無需記錄任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM