所以,我有这个问题,似乎没有人能够提供帮助.所以,不要继续抨击,我会把它扔到那里,以换取皮肤这种特殊猫的替代方法.
我目前有以下内容:
public interface ICustomerService
{
Customer GetCustomer(int id);
}
public class CustomerService : ICustomerService
{
public Customer GetCustomer(int id)
{
...
}
}
…并且使用Unity我有IOC设置,同时配置拦截,如:
IUnityContainer ioc = new UnityContainer();
ioc.RegisterType<ICustomerService, CustomerService>()
.Configure<Interception>()
.SetInterceptorFor<ICustomerService>(new InterfaceInterceptor());
我想要实现的是能够在界面中放置属性,如下所示:
public interface ICustomerService
{
[Log]
Customer GetCustomer(int id);
}
……定义如下:
public class LogAttribute: HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return new LogHandler();
}
}
…然后在LogHandler类中执行我想要的所有日志记录:
public class LogHandler : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
... log stuff
}
}
我想要实现的是一个跟踪/日志记录系统,其中处理程序记录调用namespace.class.methodname的内容,以及调用它的父namespace.class.methodname.我试过没有成功使用“输入”IMethodInvocation参数来获取我想要的信息,问题是,输入返回“ICustomerService”接口,同时检查父帧的堆栈帧返回父实现的类(例如.ServiceService)意味着当我尝试使用namespace.class.methodname作为实体ID创建树结构时,ID和parentID不匹配.
将参数放入[Log]属性也不会真正起作用,因为我可以放在那里?如果我输入接口名称,我仍然遇到与上面相同的问题,其中1的ID是接口而父接口是实现类.并且,我不能将实现类名称放在接口的属性中,因为它首先破坏了具有接口的目的!
所以,这就是困境.谁有新鲜的想法?
最佳答案 我最终使用PostSharp来实现这样的日志记录.
http://www.postsharp.org