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