任何建议都会对此表示赞赏。
我有一个标准的NTier应用程序,它实现了Unity DI。这非常好,创建了统一容器并在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>();
答案 0 :(得分:0)
我不确定我是否完全理解您的用例。
但是,您是否尝试将您的方法属性放在实现您的接口的类中?您似乎只在界面中声明了该属性。
请参阅此stackoverflow:Can a C# class inherit attributes from its interface?