c# - 没有接口(interface)的 CaSTLe Windsor 拦截器?

标签 c# c#-4.0 castle-windsor interceptor castle-dynamicproxy

使用 CaSTLe Windsor 进行 DI,我有两个实现相同接口(interface)的类;除此之外,还有一些自己的方法和属性。我正在使用 CaSTLe DynamicProxy 并创建了一个拦截器,它将通过 CaSTLe.Facilities.LoggingLoggingFacility 使用 Log4Net 进行一些日志记录。

当该方法被调用时,日志文件会整齐地记录通过接口(interface)实现的每个方法。在下面的示例代码中,方法 Foo() 在调用时会被记录,但方法 LogMeToo() 不会,因为它不是 IFoo 实现的一部分。

我希望其他未实现该接口(interface)的方法在调用时也被记录。这可能吗?如果可能:如何?

public interface IFoo
{
  void Bar();
}<br/>
[Interceptor(typeof(LoggingInterceptor))]
public class Foo : IFoo
{
  public void Bar() 
  {
    // Do Something
  }<br/>
  public void LogMeToo() 
  {
    // Do Something
  }
}<br/>
public static class Program
{
  [STAThread]
  public static void Start()
  {
    var container = new WindsorContainer();<br/>
    container.Register(Component.For<code><LoggingInterceptor</code>>().LifeStyle.Transient);
    container.Register(Component.For<code><IFoo</code>>().ImplementedBy<code><Foo</code>>());<br/>
    container.AddFacility<code><LoggingFacility</code>>(f => f.LogUsing(LoggerImplementation.Log4net).WithConfig("Log4net.config"));
  }
}
WPF C# 4.0

最佳答案

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

关于c# - 没有接口(interface)的 CaSTLe Windsor 拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4863025/

相关文章:

c# - 如何使用 LinQ 从数据集中选择多列到字符串列表中

c# - 特性信息有什么优势?

c# - 可以同时从多个线程调用单例对象的方法吗?

c# - 使用 .net mvc 5 列出多对多表关系中的数据

c# - 如何在 Windows 中获取每个进程的磁盘事件

c# - C# 中的自定义 Windows 控件库

.net - 将 CasTLe Windsor 与 SignalR 集成 - 我应该如何处理这个问题?

c# - 如何在 FSM 中创建状态之间的时间间隔

asp.net - C# 可选对象操作 MVC 参数

asp.net-mvc - 如何在 Controller 中使用依赖注入(inject)