0

对此的任何建议将不胜感激。

我有一个实现 Unity DI 的标准 NTier 应用程序。这工作得很好,统一容器被创建并注册了 BAL 中的所有内容。我还使用上述方法的属性装饰配置了接口拦截。我正在尝试测量某些方法的时间。接口拦截在 BAL 层中工作得非常好,但是当我尝试在 BAL 引用的名为 DistributionProviders 的层上使用相同的方法时,它永远不会命中调用处理程序。

我用来配置接口拦截的代码是:

   _container.AddNewExtension<Interception>()
                .Configure<Interception>()
                .SetInterceptorFor<ISftpState>(new InterfaceInterceptor());

属性是类是:

    public class ProcessLoggingAttribute : HandlerAttribute
    {
        public override ICallHandler CreateHandler(IUnityContainer container)
        {
            return new ProcessLoggingHander(); 
        }
    }

ProcessLoggingHandler 是:

public class ProcessLoggingHander : ICallHandler
{

    public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
    {

        Console.WriteLine("Starting");
       var methodReturn = getNext().Invoke(input, getNext); 

       Console.WriteLine("finishing");
       return methodReturn;            
    }

    public int Order { get; set; }
}

示例接口方法装饰:

public interface ISftpState
{
     [ProcessLogging]
     bool Connect();
}

谁能向我解释我做错了什么。我唯一能想到的是容器没有被传递到 HandlerAttribute 的 CreateHandler() 方法中。

--附加代码 - 这就是我注册 Unity 容器的方式。它实际上是单例中的一个属性。我只是解析顶级控件类,然后自动解析它下面的其他类。

UnityContainer _container = new UnityContainer();
_container.RegisterType<ISftpState,SftpState>();
4

1 回答 1

0

我不确定我是否完全理解您的用例。

但是,您是否尝试将您的方法属性放在实现您的接口的类中?似乎您只在界面中声明了该属性。

请参阅此 stackoverflow:C# 类可以从其接口继承属性吗?

于 2015-03-06T22:29:20.130 回答