[英]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.