c# - ninjectwebcommon - ninject mvc
Ninject MVC3-arranque lanzando la excepción "Ya Inicializado" (15)
¡lee los documentos!
https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
¿Cuál es la diferencia entre estos enfoques?
Ambos enfoques hacen exactamente lo mismo. Enganchan Ninject en aplicaciones MVC. La única diferencia es que usan un enfoque diferente para hacer esto. La razón para usar diferentes enfoques es que el paquete NuGet puede proporcionar integración inmediata agregando un archivo. De lo contrario, requeriría modificaciones complicadas del archivo.asax global
NOTA: Si decide usar el primer enfoque si usa el paquete NuGet (para el cual no hay razón), debe eliminar la carpeta App_Start y eliminar las referencias a WebActivator y Microsoft.Web.Infrastructure.
Creé un proyecto Asp.Net MVC3 vacío y utilicé Nuget install-package Ninject.MVC3
Sin hacer nada más (sin servicios registrados y ni siquiera un controlador creado), ejecuto la aplicación.
El Proyecto se rompe en la línea 22 en NinjectMVC3.cs con la siguiente excepción:
[InvalidOperationException: ¡Ya Inicializado!] Ninject.Web.Mvc.Bootstrapper.Initialize (Func`1 createKernelCallback) en c: / Projects / Ninject / Maintenance2.2 / ninject.web.mvc / mvc3 / src / Ninject.Web.Mvc / Bootstrapper.cs>: 58 Mvc.App_Start.NinjectMVC3.Start () en c: / Projects / Events / Events / App_Start / NinjectMVC3.cs: 22
[TargetInvocationException: la excepción ha sido lanzada por el objetivo de una invocación.]
System.RuntimeMethodHandle._InvokeMethodFast (método IRuntimeMethodInfo, Object object, Object [] arguments, SignatureStruct y sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +0
System.RuntimeMethodHandle.InvokeMethodFast (método IRuntimeMethodInfo, Object object, Object [] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +72
System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, Object [] parámetros, CultureInfo culture, Boolean skipVisibilityChecks) +335
System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, Object [] parámetros, CultureInfo culture) +28
System.Reflection.MethodBase.Invoke (objeto obj, Object [] parámetros) +19
WebActivator.BaseActivationMethodAttribute.InvokeMethod () +199 WebActivator.ActivationManager.RunActivationMethods () +330 WebActivator.ActivationManager.RunPreStartMethods () +27 WebActivator.ActivationManager.Run () +39
La línea en NinjectMVC3.cs es:
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel); // <- this one right here...
}
¿Qué está pasando con esto? He usado Ninject para MVC3 en otros proyectos sin ningún problema. Me doy cuenta de que la segunda línea del método Start () no está incluida en los paquetes más antiguos (semanas) de Ninject.MVC3, por lo que tal vez se haya roto algo más en una actualización reciente también.
¡Por favor ayuda!
Editar para responder la dirección de Remo
Esto es de mi global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
El global.asax también es 100% estándar. Sin ajustes hechos
EDITAR - El problema se ha ido ...
Honestamente, no tengo idea de qué fue lo que causó esto, pero después de algunos reinicios de Visual Studio y un reinicio completo, el proyecto está funcionando como debería. Tampoco puedo recrear el problema en nuevos proyectos.
Lo siento por hacerte perder el tiempo :)
Acabo de tener el mismo problema y me di cuenta de que era porque NuGet había agregado archivos NinjectMVC3.cs tanto a mi aplicación web como a mi biblioteca DAL. No me di cuenta de que eso había ocurrido, pero una vez que eliminé el archivo de la biblioteca DAL estaba bien.
Agregaré esto como una respuesta solo porque aún no he visto a nadie mencionarlo y vale la pena verificarlo antes de salir y clonar repositorios y otras cosas.
Experimenté este problema de la nada en una solución que contiene tal vez 15 proyectos, tres de los cuales son sitios web. Había estado trabajando en uno de los sitios cuando comencé a tener este problema sin haber cambiado nada que obviamente causaría el problema: no acababa de agregar Ninject en ningún lugar (ya estaba instalado y funcionaba bien), los archivos asax globales eran no se deriva de las clases de Ninject y nada andaba mal en cualquier carpeta de App_Start.
Después de bastante jugar con NuGet y cosas así en vano (provocados por mensajes sobre referencias no resueltas, parecía que Ninject no estaba siendo referenciado correctamente, pero lo era), revisé todos los archivos que había cambiado prestando especial atención a proyectos y archivos de configuración, y descubrió que de alguna manera Visual Studio había agregado uno de los otros sitios web como referencia de proyecto al que estaba tratando de ejecutar. Como resultado, la configuración de Ninject se ejecutaba dos veces y causaba el problema, por lo que la causa principal era la misma, pero el método del error era diferente.
No había ninguna razón para la referencia del proyecto, no estaba allí antes, ya que no era una dependencia válida, no lo agregué de forma manual y todavía no tengo idea de cómo sucedió, pero quitarlo solucionó inmediatamente el problema.
Cuando usa nuGet hay una carpeta App_start que se está creando, échele un vistazo.
Eche un vistazo a Configuración de una aplicación MVC3
En breve:
Probablemente tengas una carpeta App_Start
en tu proyecto con un archivo NinjectMVC3.cs
.
Al utilizar el paquete NuGet en combinación con la modificación de Global.asax (para lo cual no hay razón), debe eliminar la carpeta App_Start
y eliminar las referencias a WebActivator y Microsoft.Web.Infrastructure
Esta situación se me ocurrió cuando cambié los espacios de nombres de mi proyecto y luego lo cambié de nuevo.
incluso cuando limpié la solución e hice un iisreset, regresó con ''ya inicializado''.
el problema surgió de los dlls que se habían creado en el directorio bin cuando cambié el espacio de nombres y construí el proyecto: después de cambiar los espacios de nombres y limpiar la solución, los dlls del espacio de nombres alternativo seguían allí y, por lo tanto, se estaban cargando cuando el aplicación web iniciada, causando el error ''ya inicializado''.
borrar los archivos DLL solucionó el problema.
Lo más probable es que se derive de NinjectHttpApplication y del uso de AppStart al mismo tiempo. Estas dos formas no deben mezclarse.
Lea la documentación https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
No estoy seguro de qué fue lo que estaba causando que tu aplicación bombardeara, pero me alegra que los reinicios de VS lo hayan resuelto. Tuve el mismo error pero no pude corregirlo sin importar cuántas limpias / reconstrucciones hice o cuántas veces reinicié VS.
Lo que terminó trabajando para mí fue eliminar por completo el paquete Ninject MVC NuGet y agregar el dll de Ninject y Ninject a la antigua. Creo que puede haber algo mal con su paquete NuGet.
Espero que esto ayude a otra persona, perdí unas horas cuando todo lo que necesitaba era deshacerse del paquete NuGet.
Pasé alrededor de 4 horas jugando con los paquetes nuget, sin éxito.
finalmente fui a gitub y cloné un nuevo repositorio, descargué el último Ninject.Web.Common y las últimas compilaciones de lanzamiento de Ninject2 e hice una compilación de lanzamiento local.
Luego abandoné los paquetes nuget e hice referencias de ensamblado a los nuevos ensamblajes compilados "Ninject", "Ninject.Web.Common" y "Ninject.Web.Mvc" y mi proyecto comenzó a funcionar y se crearon controladores con sus dependencias resueltas.
así es como se ve mi código, pero creo que también puede haber un problema en los paquetes nuget ...
public class MvcApplication : NinjectHttpApplication
{
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
protected override Ninject.IKernel CreateKernel()
{
// declaratively add the Ninject Modules that we have built to manage our dependencies...
var modules = new INinjectModule[]{
new RepoModule()
};
return new StandardKernel(modules);
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
}
Recientemente me encontré con el mismo problema. En mi caso, tengo varios proyectos en mi solución ... y más de uno de esos proyectos contiene referencias del paquete NuGet a Ninject.MVC3.
Cuando actualicé todas las versiones de mi paquete Ninject, se crearon las carpetas App_Start en todos los proyectos que tienen referencias NuGet. Entonces, tuve que ir y eliminar las carpetas App_Start de los proyectos de la biblioteca de clases; simplemente dejando la carpeta App_Start en la aplicación MVC principal.
Resolví este problema al eliminar algunos archivos DLL de la carpeta / bin, que no se eliminaron al ejecutar el comando Limpieza desde Visual Studio.
Tuve el mismo problema con algunas pequeñas diferencias heredadas de NinjectHttpApplication y anulando OnApplicationStarted. Resolví el problema descargando de https://github.com/ninject/ninject.web.mvc lugar de usar el paquete nuget.
No tuve que hacer nada después de agregar las referencias.
Tuve el mismo problema cuando actualicé el paquete Ninject.Web.MVC3 a la versión 2.2.2.0. Noté que esta actualización agregó la siguiente línea a mi archivo .csproj (¡VCS FTW!):
<Compile Include="App_Start/NinjectMVC3.cs" />
Cambiar la acción de compilación de compilar a contenido para ese archivo resolvió mi problema. App_Start es tan malo como App_Code después de todo ...
El problema se ha ido ...
Honestamente, no tengo idea de qué fue lo que causó esto, pero después de algunos reinicios de Visual Studio y un reinicio completo, el proyecto está funcionando como debería. Tampoco puedo recrear el problema en nuevos proyectos.
Lo siento por hacerte perder el tiempo :)
ACTUALIZAR
Desde la publicación de esta respuesta, han aparecido algunas buenas respuestas. Estoy actualizando esta respuesta para recopilar los diferentes enfoques en una respuesta. Espero que esté bien para ustedes, chicos:
DevilDog74 respondió
finalmente fui a gitub y cloné un nuevo repositorio, descargué el último Ninject.Web.Common y las últimas compilaciones de lanzamiento de Ninject2 e hice una compilación de lanzamiento local. luego abandoné los paquetes nuget e hice referencias de ensamblado a los ensamblados recién compilados "Ninject", "Ninject.Web.Common" y "Ninject.Web.Mvc" y mi proyecto comenzó> funcionando y se crearon controladores con sus dependencias siendo resuelto.
Jeff Circeo respondió
Resolví el problema descargando de https://github.com/ninject/ninject.web.mvc lugar de usar el paquete nuget. No tuve que hacer nada después de agregar las referencias.
respondió
Lo que terminó trabajando para mí fue eliminar por completo el paquete Ninject MVC NuGet y agregar el dll de Ninject y Ninject a la antigua. Creo que puede haber algo mal con su paquete NuGet.
asegúrese de que solo un ensamblado tenga la clase "NinjectMVC3", si a.dll, b.dll tiene la clase NinjectMVC3 en el directorio bin, ¡se producirá dicho error!