我在Ninject中尝试使用拦截器和动态代理,而且我遇到了一个我真正需要解开的问题'基类实例的类的代理实例。这可能吗?看起来应该很简单,但我无法找到办法。
这成功调用了拦截器:
[MyInterceptorAttribute()]
public virtual int MethodCall(int input)
但是我想找到并实例化属性出现的每个类的非代理版本:
var methods = assembly.GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => Attribute.IsDefined(m, typeof(MyInterceptorAttribute)))
.ToList();
foreach(var method in methods) {
// The proxied instance
instance = kernel.Get(method.DeclaringType);
}
如何获取非代理实例?
答案 0 :(得分:0)
如果您有权访问激活上下文,则可以执行以下操作:
var reference= new InstanceReference()
{
Instance = yourWrappedObject
};
new DynamicProxyProxyFactory(context.Kernel).Unwrap(context,reference);
return reference.Instance;