为什么我在没有目标方法的情况下,会收到“拦截器试图‘Proceed’”的错误?

3
在我的情况下,我有主项目和测试项目。在测试项目中,我只有一个安装程序类并将所有内容都注册在同一个地方,因此我得到了正确的结果。而在我的主要项目中,我有几个安装程序(一个用于服务,一个用于拦截器,一个用于通用库,一个用于数据持久性)。对于主项目,我遇到了以下错误:
这是DynamicProxy2的错误:拦截器尝试“执行”没有目标的方法,例如接口方法或抽象方法。
我一直在努力找出问题所在。我插入了一个接受数据持久层接口的构造函数,并发现它只接收到一个代理对象。
3个回答

2

另外,请参考这里:手动将工厂扩展加载到Ninject内核中

在某些情况下,可能需要手动加载扩展。在我的情况下,解决方法是在内核构建期间添加以下代码:

if (!kernel.HasModule("Ninject.Extensions.Factory.FuncModule"))
{
    kernel.Load(new FuncModule());
}

1
这是为什么会发生的原因:http://kozmic.net/2009/03/20/castle-dynamic-proxy-tutorial-part-viii-interface-proxy-without-target/中有详细说明。
Krzysztof解释说,Castle甚至可以解析接口,并且Windsor会为您创建一个类。但是,如果您想使用拦截器并调用invocation.Proceed()方法,则需要指定该方法内部发生的事情(例如使用lambda表达式)。
解决方案: 在我的情况下,解决方案是将所有安装程序放在一个安装程序中,除了拦截器安装程序。那个可以保持独立,一切都很好。

0
如果您在使用Update方法时遇到了这个问题,请按照以下方式进行更改:
 var myObj = _dbContext.Set<T>().Find(entity.Id);
 _dbContext.Entry(myObj).CurrentValues.SetValues(entity);
_dbContext.SaveChanges();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接