对此的任何建议将不胜感激。
我有一个实现 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>();