c# asp.net-mvc nuget ninject

c# - Ninject.MVC5 no genera NinjectWebCommon.Cs



asp.net-mvc nuget (4)

Después de muchas búsquedas y pruebas, obtuve la solución exacta, donde tuve un error mientras el sistema intentaba crear múltiples instancias a la vez con la respuesta anterior. Aquí necesitaba crear la clase NinjectWebCommon solo sin heredar 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() }); } }

Pero aquí hay un problema con el constructor parametrizado. Para evitar este problema, agregué un método para crear una instancia concreta . Así que aquí está el código actualizado ...

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() }); } }

Estoy desarrollando un proyecto MVC5 en Visual Studio 2017 versión 15.4. Estoy obteniendo un resultado inesperado aquí que nunca había enfrentado antes. He instalado el paquete nuget de nuget . Se está instalando muy bien y no da ningún error o advertencia. Pero el problema es que no está generando el archivo App_Start en la carpeta App_Start . ¿Hay alguna razón?


Instale Ninject.MVC5 del paquete Nuget y mantenga la versión 3.2.1 En la última versión 3.3.0, no estaba agregando el archivo NinjectWebCommon.cs, así que bajé la versión y me ha funcionado.

¡Feliz codificación!


Instale todos los paquetes a continuación que funcionarán automáticamente.

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 codifica aquí version = 3.3.1 targetFramework = net451 package id = Ninject.Web.Common.W


Parece que el paquete más reciente de Ninject.Web.Common.WebHost 3.3.0 de NuGet ya no incluye el NinjectWebCommon.cs. Las versiones anteriores, como 3.2.0 incluyen este archivo.

Ninject.Web.Common.WebHost 3.3.0 proporciona una clase NinjectHttpApplication que puede derivar y usar en lugar de NinjectWebCommon.cs. La documentación wiki de Ninject no parece haberse actualizado, pero parece que el uso de NinjectHttpApplication es un enfoque documentado

ver el comentario de mat - Web API2 NinjectWebCommon.cs no aparece