我现在已经开始大约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下工作。
答案 0 :(得分:2)
MissingMethodException
通常是部署问题。您针对与部署不同的程序集进行编译。检查您是否部署了相同的版本和相同的版本。
答案 1 :(得分:1)
因此,经过一周左右的时间,结果证明问题在于Nancy开发团队与最新版本的ninject打破了二元可比性(反之亦然): - )
有一个GitHub拉取请求可以解决这个问题:
https://github.com/NancyFx/Nancy.Bootstrappers.Ninject/pull/6
然而,下一个版本'Nancy.Bootstrapper.Ninject'0.12将很快出现在NuGet上,这将实现修复。