3
使用Castle Windsor進行DI,我有兩個類實現相同的接口;除此之外還有其自己的一些方法和屬性。我正在使用Castle DynamicProxy並創建了一個攔截器,它將通過Castle.Facilities.LoggingLoggingFacility對Log4Net進行一些日誌記錄。Castle Windsor Interceptor w/o Interface?
當調用該方法時,日誌文件整齊地記錄每個通過接口實現的方法。在下面的示例代碼中,方法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
感謝您的回答。你能否指點我有關如何使方法變爲虛擬並將類作爲服務公開的文檔?至於破碎的抽象:在我的真實代碼中,Bar()在新的後臺線程中啓動LogMeToo(),並且當發生這種情況時我想攔截。 – KBoek 2011-02-02 09:51:54