Ninject.MVC5 未生成 NinjectWebCommon.Cs
Ninject.MVC5 not generating NinjectWebCommon.Cs
我正在 Visual Studio 2017 版本 15.4 上开发 MVC5 项目。我在这里得到了意想不到的结果,这是我以前从未遇到过的。我已经从 nuget
安装了 Ninject.MVC5
包。它安装得很好,没有给出任何错误或警告。但问题是它没有在 App_Start
文件夹中生成 NinjectWebCommon.cs
文件。有什么原因吗?
看起来最新的 Ninject.Web.Common.WebHost 3.3.0 NuGet 包不再包含 NinjectWebCommon.cs。旧版本,例如 3.2.0 确实包含此文件。
Ninject.Web.Common.WebHost 3.3.0 提供了一个 NinjectHttpApplication class,您可以从中派生并使用它来代替 NinjectWebCommon.cs。 Ninject 的 wiki 文档似乎没有更新,但看起来使用 NinjectHttpApplication 是一种记录的方法
查看 mat 的评论 -
经过大量搜索和测试,我找到了确切的解决方案,当系统尝试使用先前的答案一次创建多个实例时,我遇到了错误。这里我只需要创建NinjectWebCommon
class 而不继承 NinjectHttpApplication
。
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Load(new INinjectModule[]
{
new Module()
});
}
}
但参数化构造函数存在问题。为了避免这个问题,我添加了一个创建具体实例的方法。所以这是更新后的代码..
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
return Container;
}
public static T GetConcreteInstance<T>()
{
object instance = Container.TryGet<T>();
if (instance != null)
return (T)instance;
throw new InvalidOperationException(string.Format("Unable to create an instance of {0}", typeof(T).FullName));
}
public static IKernel _container;
private static IKernel Container
{
get
{
if (_container == null)
{
_container = new StandardKernel();
_container.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
_container.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(_container);
}
return _container;
}
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Load(new INinjectModule[]
{
new Module()
});
}
}
从 Nuget 包安装 Ninject.MVC5 并保留版本 3.2.1
在最新的 3.3.0 版本中,它没有添加 NinjectWebCommon.cs 文件,所以我降级了版本,它对我有用。
编码愉快!
安装以下所有软件包,它将自动运行。
package id=Ninject version=3.3.4 targetFramework=net451 package id=Ninject.Extensions.Conventions version=3.3.0 targetFramework=net451 package id=Ninject.Extensions.Factory version=3.3.2 targetFramework=net451 package id=Ninject.MVC5 version=3.3.0 targetFramework=net451 package id=Ninject.Web.Commonenter code here version=3.3.1 targetFramework=net451 package id=Ninject.Web.Common.W
我遇到了同样的问题,为了解决这个问题,我将 Ninject 软件包版本更改为 3.2.2。(降级)通过这样做 NinjectWebCommon.cs 将在 运行 宁项目它会给出错误,所以再次切换到 Ninject 包的早期版本。
运行 project.The 项目将 运行 正确
- 转到:"Manage nuget Packages" 项目的联系菜单。
- Select安装了Pakages(你必须已经安装了ninject.mvc5)
- 更新所有已安装的相关 ninject 包。这可能包括:
ninject.web.common,
ninject,
ninject.web.common.webhost
您在家 App_Start 文件夹中有 NinjectWebCommon.cs
Install-Package Ninject.Web.Common.Webhost
这将为您创建文件。编码愉快!!!
您需要安装 Ninject.Web.Commom 并创建文件
这个技巧对我有用:
- 首先将所有Ninject相关的包依赖降级到3.2.0版本。
- 现在您将在 App_Start 中拥有 NinjectWebCommon.cs 文件。
- 根据您的要求编辑文件。
- 访问包管理器UI,它会自动开始要求您将所有 Ninject 依赖项升级到最新的,做吧!
您的 NinjectWebCommon.cs 文件将保持完整!编码愉快!
我正在 Visual Studio 2017 版本 15.4 上开发 MVC5 项目。我在这里得到了意想不到的结果,这是我以前从未遇到过的。我已经从 nuget
安装了 Ninject.MVC5
包。它安装得很好,没有给出任何错误或警告。但问题是它没有在 App_Start
文件夹中生成 NinjectWebCommon.cs
文件。有什么原因吗?
看起来最新的 Ninject.Web.Common.WebHost 3.3.0 NuGet 包不再包含 NinjectWebCommon.cs。旧版本,例如 3.2.0 确实包含此文件。
Ninject.Web.Common.WebHost 3.3.0 提供了一个 NinjectHttpApplication class,您可以从中派生并使用它来代替 NinjectWebCommon.cs。 Ninject 的 wiki 文档似乎没有更新,但看起来使用 NinjectHttpApplication 是一种记录的方法
查看 mat 的评论 -
经过大量搜索和测试,我找到了确切的解决方案,当系统尝试使用先前的答案一次创建多个实例时,我遇到了错误。这里我只需要创建NinjectWebCommon
class 而不继承 NinjectHttpApplication
。
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Load(new INinjectModule[]
{
new Module()
});
}
}
但参数化构造函数存在问题。为了避免这个问题,我添加了一个创建具体实例的方法。所以这是更新后的代码..
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
return Container;
}
public static T GetConcreteInstance<T>()
{
object instance = Container.TryGet<T>();
if (instance != null)
return (T)instance;
throw new InvalidOperationException(string.Format("Unable to create an instance of {0}", typeof(T).FullName));
}
public static IKernel _container;
private static IKernel Container
{
get
{
if (_container == null)
{
_container = new StandardKernel();
_container.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
_container.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(_container);
}
return _container;
}
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Load(new INinjectModule[]
{
new Module()
});
}
}
从 Nuget 包安装 Ninject.MVC5 并保留版本 3.2.1 在最新的 3.3.0 版本中,它没有添加 NinjectWebCommon.cs 文件,所以我降级了版本,它对我有用。
编码愉快!
安装以下所有软件包,它将自动运行。
package id=Ninject version=3.3.4 targetFramework=net451 package id=Ninject.Extensions.Conventions version=3.3.0 targetFramework=net451 package id=Ninject.Extensions.Factory version=3.3.2 targetFramework=net451 package id=Ninject.MVC5 version=3.3.0 targetFramework=net451 package id=Ninject.Web.Commonenter code here version=3.3.1 targetFramework=net451 package id=Ninject.Web.Common.W
我遇到了同样的问题,为了解决这个问题,我将 Ninject 软件包版本更改为 3.2.2。(降级)通过这样做 NinjectWebCommon.cs 将在 运行 宁项目它会给出错误,所以再次切换到 Ninject 包的早期版本。 运行 project.The 项目将 运行 正确
- 转到:"Manage nuget Packages" 项目的联系菜单。
- Select安装了Pakages(你必须已经安装了ninject.mvc5)
- 更新所有已安装的相关 ninject 包。这可能包括:
ninject.web.common, ninject, ninject.web.common.webhost
您在家 App_Start 文件夹中有 NinjectWebCommon.cs
Install-Package Ninject.Web.Common.Webhost
这将为您创建文件。编码愉快!!!
您需要安装 Ninject.Web.Commom 并创建文件
这个技巧对我有用:
- 首先将所有Ninject相关的包依赖降级到3.2.0版本。
- 现在您将在 App_Start 中拥有 NinjectWebCommon.cs 文件。
- 根据您的要求编辑文件。
- 访问包管理器UI,它会自动开始要求您将所有 Ninject 依赖项升级到最新的,做吧!
您的 NinjectWebCommon.cs 文件将保持完整!编码愉快!