3

使用 Castle Windsor 进行 DI,我有两个实现相同接口的类;除此之外还有一些自己的方法和属性。我正在使用 Castle DynamicProxy 并创建了一个拦截器,它将通过 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

4

1 回答 1

3

不,除非您将方法设为虚拟并将类公开为(第一个)服务以便生成类代理,否则这是不可能的。然而,这听起来像是抽象的破碎。如果您要公开FooIFoo那么LogMeToo无论如何都不会被调用-无需记录任何内容。

于 2011-02-01T15:27:29.153 回答