【发布时间】:2012-06-15 11:18:55
【问题描述】:
我已经为此苦恼了大约 8 个小时,但我似乎无法找到一个简单的解释来说明如何更改我的 ninject 的自定义引导程序(上次在 v2.x.x.x 中处理代码) 到新的 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(我通常使用structuremap),这个项目使用的唯一原因是我最初没有编写它。
自从我升级了 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 设置作为 Windows 服务,使用 Topshelf 提供 SCM 接口。
干杯
肖蒂
补充说明
这是一个现有项目,最初是在某个时候编写的,我被要求为该项目添加一些新功能。
作为添加这些新功能的一部分,我需要将正在使用的 Ninject 版本从早期版本升级到 V3.0.0.0,因为添加到项目中的新依赖项需要更新版本的 Ninject。
在之前的 Ninject V2 下,我上面给出的代码运行良好,没有任何问题,因为项目添加了 Ninject V3,所以我现在得到了如上所述的异常。
我无法返回到早期版本的 Ninject,因为这意味着无法添加我正在添加的新功能。
根据我迄今为止所做的研究,上面的Sharpfellows链接是迄今为止我在互联网上找到的最接近我的问题的解释。
我不经常使用 Ninject,所以我不知道 V2 和 V3 之间发生了什么变化(根据我的研究)是我的问题的原因。
我需要知道如何更改我在 V2 下编写的代码(如上所示),以便它在 V3 下工作。
【问题讨论】: