为什么我让拦截器试图'继续'没有目标错误的方法?

时间:2013-09-25 08:58:09

标签: .net castle-windsor castle-dynamicproxy

在我的情况下,我有主项目和测试项目。我在测试项目上获得了正确的结果,我只有一个安装程序类,并在一个地方注册所有内容。在我的主项目中,我有几个安装程序(一个用于服务,一个用于拦截器,一个用于公共库,一个用于数据持久性)。对于主项目,我收到了指定的错误:

这是一个DynamicProxy2错误:拦截器试图为没有目标的方法“继续”,例如,接口方法或抽象方法

我正在努力找出问题所在。我插入了接受数据持久层接口的构造函数,并看到它只接收代理对象。

3 个答案:

答案 0 :(得分:1)

为什么会发生这种情况在此指定:http://kozmic.net/2009/03/20/castle-dynamic-proxy-tutorial-part-viii-interface-proxy-without-target/

Krzysztof解释说,Castle可以解决甚至是界面,Windsor会为您创建一个。但是,如果要使用拦截器并调用invocation.Proceed()方法,则需要指定该方法内部发生的事情(例如,使用lambda表达式)

<强>解决方案: 在我的情况下,解决方案是将所有安装程序放入一个,除了拦截器安装程序。那个人可以独自一人,而且一切都很好。

答案 1 :(得分:1)

此外,请参见此处:Manually Loading the Factory Extension into the Ninject Kernel

在某些情况下,可能有必要手动加载扩展。我的解决方案是在内核构建过程中添加以下代码:

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

答案 2 :(得分:0)

如果您通过Update方法遇到此问题,请像这样更改它:

 var myObj = _dbContext.Set<T>().Find(entity.Id);
 _dbContext.Entry(myObj).CurrentValues.SetValues(entity);
_dbContext.SaveChanges();