V2 Ninject绑定转换为V3

时间:2012-06-15 11:18:55

标签: ninject ninject-2

我现在已经开始大约8个小时了,我似乎无法找到关于如何为ninject更改我的自定义引导程序的简单解释(最后在v2.xxx中的代码上工作了) )到新的v3.0.0.0语法。

我目前有以下内容:

public class NinjectCustomBootStrapper : NinjectNancyBootstrapper
{
  protected override Ninject.IKernel GetApplicationContainer()
  {
    return Program.MyContainer;
  }

}

在隔间课程中,并且:

public static IKernel MyContainer
{
  get { return _myContainer ?? (_myContainer = CreateKernel()); }
  set { _myContainer = value; }
}

private static IKernel CreateKernel()
{
  var kernel = new StandardKernel();
  kernel.Bind<CardMonitorService>().ToSelf().InSingletonScope();
  return kernel;
}

在我的主程序'Program.c'中的命令行应用程序。

自从更新ninject到V3.0.0.0以来,我发现已经发生了一些重大变化。我承认我不经常使用ninject(我通常使用结构图),这个项目的唯一原因是我最初没有写它。

由于我已经升级了Ninject,现在当应用程序启动时,我得到以下异常:

Method not found: 'Ninject.Syntax.IBindingWhenInNamedWithOrOnSyntax`1<!0>
Ninject.Syntax.IBindingToSyntax`1.ToConstant(!0)'.

经过大量的搜索和研究,我能找到的最接近的是:

http://sharpfellows.com/post/Ninject-Auto-registration-is-changing-in-version-3.aspx

虽然它指出了我正确的方向,但仍然不是一个解决方案,因为我没有使用自定义绑定生成器。

所以我的问题是这个。

如何重写上面的内容,以便我的项目再次起作用,并且当被请求进入时,调用的WCF服务会获得正确的单例绑定。返回ninject 2不是一个选项,因为其他依赖项已添加的项目强制进行v3升级,并添加了已请求的新功能,因此我正在研究它。

作为参考,这是一个.NET4构建,在NancyFX上运行,自带托管WCF设置为使用Topshelf提供SCM接口的Windows服务。

干杯

辣妹

稍微清理一下的附录

这是一个最初编写的现有项目,我被要求为项目添加一些新功能。

作为添加这些新功能的一部分,我需要将从早期版本使用的Ninject版本升级到V3.0.0.0,因为添加到项目中的新增依赖项需要更新版本的Ninject。

在之前的Ninject V2中,我上面给出的代码工作正常,没有任何问题,因为项目已经添加了Ninject V3,我现在得到如上所述的异常。

我无法回到早期版本的Ninject,因为这意味着无法添加我正在添加的新功能。

从迄今为止我所做的研究中,上面的sharpfellows链接是我迄今为止在互联网上找到的最接近我的问题的解释。

我不经常使用Ninject,所以我没有后台知道V2和amp;之间的变化。 V3(基于我的研究)是我的问题的原因。

我需要知道如何更改我在V2下编写的代码(如上所示),以便在V3下工作。

2 个答案:

答案 0 :(得分:2)

MissingMethodException通常是部署问题。您针对与部署不同的程序集进行编译。检查您是否部署了相同的版本和相同的版本。

答案 1 :(得分:1)

因此,经过一周左右的时间,结果证明问题在于Nancy开发团队与最新版本的ninject打破了二元可比性(反之亦然): - )

有一个GitHub拉取请求可以解决这个问题:

https://github.com/NancyFx/Nancy.Bootstrappers.Ninject/pull/6

然而,下一个版本'Nancy.Bootstrapper.Ninject'0.12将很快出现在NuGet上,这将实现修复。