Unity IOC,AOP&接口拦截

时间:2009-11-24 12:33:02

标签: c# .net inversion-of-control unity-container aop

我一直在玩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”

对这些人有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

我前段时间尝试做类似的事情,我已经通过Unity源代码做了一些研究,我想出的唯一解决方案是通过{{1}私有字段的反射来获取CustomerService实例1}}(我不记得它的名字,你可以在调试器中轻松找到它)。我知道这不是一个优雅且可维护的解决方案,但看起来这就是我们所能做的一切。