我一直在和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实例(我不记住它的名称,您可以在调试器中轻松找到它)。我知道这不是一个优雅且可维护的解决方案,但看起来这就是我们所能做的。

10-04 17:51