使用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
答案 0 :(得分:3)
不,除非您将方法设为虚拟并将类作为(第一个)服务公开,以便生成类代理,否则不可能。然而,这闻起来像抽象的破碎。如果您将Foo
公开为IFoo
,那么LogMeToo
永远不会被调用 - 无需记录任何内容。