用Ninject解包截获的代理

时间:2015-08-26 03:21:37

标签: c# proxy ninject interceptor

我在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);
}

如何获取非代理实例?

1 个答案:

答案 0 :(得分:0)

如果您有权访问激活上下文,则可以执行以下操作:

var reference= new InstanceReference()
        {
            Instance = yourWrappedObject
        };
new DynamicProxyProxyFactory(context.Kernel).Unwrap(context,reference);

return reference.Instance;
相关问题