我一直在和Unity一起玩一些AOP的事情,通过IOC进行设置,例如:
ioc.RegisterType<ICustomerService, CustomerService>()
.Configure<Interception>().SetInterceptorFor<ICustomerService>(new InterfaceInterceptor());
...,然后在ICustomerService接口的方法上使用ICallHandler。暂时,我只想获取调用的方法,该方法所在的类以及该类的名称空间。所以...里面...
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
... ICallHandler的方法,如果使用input.MethodBase.DeclaringType.Name,我可以通过input.MethodBase.Name ...访问方法名称。我得到ICustomerService接口...但是...我该怎么办得到实现类“ CustomerService”而不是接口?
有人告诉我使用input.Target ..,但这只会返回“ DynamicModule.ns.Wrapped_ICustomerService_4f2242e5e00640ab84e4bc9e05ba0a13”
对这些人有帮助吗?
最佳答案
我前段时间尝试做类似的事情,我已经通过Unity源代码进行了一些研究,而我想到的唯一解决方案是通过从CustomerService
的私有字段反射得到input.Target
实例(我不记住它的名称,您可以在调试器中轻松找到它)。我知道这不是一个优雅且可维护的解决方案,但看起来这就是我们所能做的。