Acabo de presentar Archivo -> Nuevo proyecto anoche en un nuevo proyecto. Ah, el olor a campos verdes.Uso de ASP.NET MVC 2 con Ninject 2 desde cero
estoy usando el recién publicado ASP.NET MVC 2 (es decir, sin vista previa o liberar candidato, la cosa real), y pensé en bajar a un buen comienzo usando Ninject 2 (versión también liberado) con las extensiones MVC. I descargué el proyecto de extensiones MVC, lo abrí en VS2008Sp1, lo construí en modo de lanzamiento, y luego entré en la carpeta mvc2 \ build \ release y copié Ninject.dll y Ninject.Web.Mvc.dll desde allí al Carpeta de bibliotecas en mi proyecto (para que pueda arrastrarlos en el control de fuente y siempre tenga la versión correcta en todas partes). No incluí los archivos .xml correspondientes, ¿debería? ¿Simplemente proporcionan intellisense, o alguna otra función? No es un gran problema, creo.
Anyhoo, seguí el consejo más actualizado que pude encontrar; I hace referencia a las DLL en mi proyecto MVC2, luego fui a trabajar en Global.asax.cs. Primero lo hice heredar de NinjectHttpApplication. I eliminó el método Application_Start() y anuló OnApplicationStarted() en su lugar. Aquí es que el método:
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
// RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
Y también he seguido el consejo de VS e implementado el método CreateKernel :
protected override Ninject.IKernel CreateKernel()
{
// RegisterAllControllersIn(Assembly.GetExecutingAssembly());
return new StandardKernel();
}
Eso es todo. No hay otras modificaciones al proyecto.
Observará que el método RegisterAllControllersIn() se comenta en dos lugares anteriores. He pensado que puedo ejecutarlo en tres combinaciones diferentes de , todas con sus efectos secundarios originales;
- Ejecutarlo como arriba.
Me presentan la página estándar "Bienvenido a ASP.NET MVC" en toda su 'gloria. Sin embargo, después de que esta página se muestre correctamente en el navegador , VS me muestra una excepción que se lanzó. Lanza en NinjectControllerFactory.GetControllerInstance(), que se llamó con un valor NULL en el parámetro controllerType. Observe que este ocurre después de que se renderiza la página/Home - No tengo idea de por qué se llama de nuevo y mediante el uso de puntos de interrupción ya he determinado que GetControllerInstance() se ha llamado con éxito para el HomeController . ¿Por qué esta nueva llamada con controllerType como null? I realmente no tengo idea. Presionando F5 en este momento me lleva de vuelta al buscador , no hay quejas allí.
- Uncommenting el método RegisterAllControllersIn() en CreateKernel()
Aquí es donde la materia está empezando a conseguir enrrollados. Ahora recibo un error 404 .Algunas veces también he recibido una ArgumentNullException en la línea RegisterAllControllersIn(), pero eso es bastante raro, y no he podido reproducirlo en .
- Uncommenting los RegisterAllControllers método() en OnApplicationStarted()
(Y poner el comentario de nuevo en la de CreateKernel())
resulta en un comportamiento que parece exactamente igual que en punto 1.
Para que no se pierda para siempre, existe una guía exacta paso a paso sobre cómo configurar un proyecto MVC 2 con Ninject 2 (ambos no beta versiones de lanzamiento) para obtener los controladores proporcionados por Ninject? Del curso , comenzaré a proporcionar algunas cosas reales para la inyección (como objetos y repositorios de ISession, registradores, etc.), pero pensé que Primero conseguiría esto.
¡Cualquier ayuda será muy apreciada!
(también publicado en el grupo de Google Ninject)
Esto está en el proceso de ser arreglado por los chicos de Ninject. ¡Más cuando tengo mi cabeza alrededor de todo! –
¿Por qué no registra ningún módulo como en http://github.com/enkari/ninject.web.mvc (readme.markdown)? (He visto el hilo en http://groups.google.com/group/ninject/browse_thread/thread/c011f0bd83993a59)? –
Hola, La razón por la que no hay módulos es que se trata de un proyecto virgen, y los repositorios y otras cosas que se inyectarán aún no existen. Lo primero que hice después de configurar el proyecto MVC fue básicamente agregar Ninject 2 a la mezcla, para asegurarme de que la inyección del controlador funcionó, y no fue así. Entonces esa es mi razón :) –