C# 使用Ninject展开截获的代理
我在Ninject中试验拦截器和动态代理,遇到了一种情况,我真的需要将类的代理实例“展开”到基实例。这可能吗?看起来应该很简单,但我找不到办法 这将成功调用拦截器:C# 使用Ninject展开截获的代理,c#,proxy,ninject,interceptor,C#,Proxy,Ninject,Interceptor,我在Ninject中试验拦截器和动态代理,遇到了一种情况,我真的需要将类的代理实例“展开”到基实例。这可能吗?看起来应该很简单,但我找不到办法 这将成功调用拦截器: [MyInterceptorAttribute()] public virtual int MethodCall(int input) 但是我想找到并实例化属性出现的每个类的非代理版本: var methods = assembly.GetTypes() .SelectMany(t => t.GetM
[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);
}
如何获取非代理实例?据我所知,Ninject本身不提供访问代理目标的任何特定接口。对于某些类型的代理(类代理),这甚至是不可能的,因为代理实际上继承自代理类型,因此在访问代理时没有明显的区别
如果您将Ninject与castle dynamic proxy一起使用,请展示如何访问其他类型代理的代理类型的方法。如果您可以访问激活上下文,则可以执行以下操作:
var reference= new InstanceReference()
{
Instance = yourWrappedObject
};
new DynamicProxyProxyFactory(context.Kernel).Unwrap(context,reference);
return reference.Instance;
他们的解决方案是一个相当恶劣的黑客,但它的工作!谢谢:)