Pregunta

Sólo hice Archivo -> Nuevo proyecto anoche en un nuevo proyecto. Ah, el oler de campos verdes.

Estoy utilizando el recién publicado ASP.NET MVC 2 (es decir, ninguna vista previa o la liberación candidato, la cosa real), y pensó que tendría un comienzo bueno usando Ninject 2 (versión también liberado) con las extensiones MVC. yo descargado el proyecto MVC extensiones, lo abrió en VS2008Sp1, construido que en modo de lanzamiento, y luego fue a la acumulación MVC2 carpeta \ \ liberación y copiado Ninject.dll y Ninject.Web.Mvc.dll desde allí a la Bibliotecas carpeta en mi proyecto (de modo que pueda cargar a su alrededor en control de origen y siempre tiene la versión correcta en todas partes). No lo hice incluir los archivos .xml correspondientes - debería? ¿Se limitan a proporcionar IntelliSense, o alguna otra función? No es un gran problema que yo creo.

Anyhoo, he seguido el consejo más arriba-hasta la fecha he podido encontrar; yo hace referencia a los archivos DLL en mi proyecto MVC2, luego fue a trabajar en Global.asax.cs. Primero hice que herede de NinjectHttpApplication. yo eliminado el método Application_Start (), y overrode 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 siguió el consejo de VS e implementó el CreateKernel Método:

protected override Ninject.IKernel CreateKernel() 
{ 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    return new StandardKernel(); 
} 

Eso es todo. No hay otras modificaciones en el proyecto.

Se dará cuenta de que se comenta el método RegisterAllControllersIn () a cabo en dos lugares más arriba. He descubierto que se puede ejecutar en tres diferentes combinaciones, todos con sus efectos secundarios cobardes;

  • ejecutándolo como anteriormente.

Soy presentó entonces con la norma "Bienvenido a ASP.NET MVC" en la página toda su gloria. Sin embargo, después de esta página se muestra correctamente en el navegador, VS me muestra una excepción emitida. Se lanza en NinjectControllerFactory.GetControllerInstance (), que fue llamado con un valor NULL en el parámetro controllerType. Tenga en cuenta que este que sucede después de la página / Inicio se hace - no tengo idea de por qué es se llama de nuevo, y mediante el uso de puntos de ruptura que ya he determinado que GetControllerInstance () se ha llamado con éxito para el HomeController. ¿Por qué esta nueva llamada con controllerType como nulo? yo realmente no tienen idea. Al pulsar F5 en este momento me lleva de vuelta a la navegador, no hay quejas.

  • descomentando la RegisterAllControllersIn () en CreateKernel ()

Aquí es donde la materia está empezando a conseguir enrrollados. Ahora consigo un 404 error. Algunas veces también han conseguido una ArgumentNullException en el RegisterAllControllersIn línea (), pero eso es bastante raro, y no tengo no ha sido capaz de reproducirla.

  • descomentando la RegisterAllControllers () en OnApplicationStarted ()

(Y poner la parte posterior comentario en el que está en CreateKernel ())

Los resultados en el comportamiento que parece exactamente igual que en el punto 1.

Así que para evitar que va para siempre - ¿existe una exacta paso a paso guiará sobre cómo configurar un proyecto de MVC 2 con Ninject 2 (ambos no-beta versiones de lanzamiento) para obtener los controladores proporcionados por Ninject? De Por supuesto que entonces empezará a proporcionar un poco de materia real de la inyección (Como objetos ISession y repositorios, registradores, etc.), pero pensé Me gustaría conseguir este trabajo en primer lugar.

Cualquier ayuda será muy apreciada!

(también publicado en el grupo de Google Ninject)

¿Fue útil?

Solución

Me siento sucia responder a mi propia pregunta, pero en beneficio de cualquier persona que pudiera pasear en este ...

Esto no es un problema Ninject, en realidad, parece ser un problema con la Cassini (el servidor web integrado en VS2k8), que se encarga de estas solicitudes de manera diferente que IIS se ocuparía de ellos. La razón básica es que la aplicación obtiene una solicitud de favicon.ico, que Cassini envía a MVC, y Ninject no sabía cómo manejar la situación.

Ian Davis tuvo una corrección de errores para esto en una cantidad impresionante corto de tiempo, y también se recomienda añadir un ignoran ruta para evitar este problema en concreto mientras se hace el desarrollo. Sólo tiene que añadir lo siguiente a su configuración de rutas:

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

Espero que esto ayude a alguien!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top