我一直在玩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.Name访问方法名称...如果我使用input.MethodBase.DeclaringType.Name我得到接口ICustomerService ...但是......怎么会我去获取实现类“CustomerService”而不是接口?
我被告知使用input.Target ..但只返回“DynamicModule.ns.Wrapped_ICustomerService_4f2242e5e00640ab84e4bc9e05ba0a13”
对这些人有什么帮助吗?
答案 0 :(得分:1)
我前段时间尝试做类似的事情,我已经通过Unity源代码做了一些研究,我想出的唯一解决方案是通过{{1}私有字段的反射来获取CustomerService
实例1}}(我不记得它的名字,你可以在调试器中轻松找到它)。我知道这不是一个优雅且可维护的解决方案,但看起来这就是我们所能做的一切。