就我而言,我有主项目和测试项目。我在测试项目中得到了正确的结果,我只有一个安装程序类并将所有内容注册在一个地方。在我的主要项目中,我有几个安装程序(一个用于服务,一个用于拦截器,一个用于公共库,一个用于数据持久性)。对于主项目,我收到指定的错误:
这是一个 DynamicProxy2 错误:拦截器试图为没有目标的方法“继续”,例如,接口方法或抽象方法
我正在努力找出问题所在。我插入了接受数据持久层接口的构造函数,发现它只接收一个代理对象。
就我而言,我有主项目和测试项目。我在测试项目中得到了正确的结果,我只有一个安装程序类并将所有内容注册在一个地方。在我的主要项目中,我有几个安装程序(一个用于服务,一个用于拦截器,一个用于公共库,一个用于数据持久性)。对于主项目,我收到指定的错误:
这是一个 DynamicProxy2 错误:拦截器试图为没有目标的方法“继续”,例如,接口方法或抽象方法
我正在努力找出问题所在。我插入了接受数据持久层接口的构造函数,发现它只接收一个代理对象。
另外,请参见此处:手动将工厂扩展加载到 Ninject 内核中
在某些情况下,可能需要手动加载扩展。我的解决方案是在内核构建期间添加以下代码:
if (!kernel.HasModule("Ninject.Extensions.Factory.FuncModule"))
{
kernel.Load(new FuncModule());
}
为什么会发生这种情况在此处指定:http: //kozmic.net/2009/03/20/castle-dynamic-proxy-tutorial-part-viii-interface-proxy-without-target/
Krzysztof 解释说,Castle甚至可以解析接口,Windsor 将为您创建一个类。但是,如果您想使用拦截器并调用 invocation.Proceed() 方法,则需要指定该方法内部发生的情况(例如,使用 lambda 表达式)
解决方案: 在我的情况下,解决方案是将所有安装程序合二为一,拦截器安装程序除外。那个人可以一个人呆着,一切都很好。
如果您通过 Update 方法遇到此问题,请像这样更改它:
var myObj = _dbContext.Set<T>().Find(entity.Id);
_dbContext.Entry(myObj).CurrentValues.SetValues(entity);
_dbContext.SaveChanges();