visual tutorial studio net mvc form for espaƱol aspnet asp asp.net-mvc-2 ninject-2

tutorial - Usar ASP.NET MVC 2 con Ninject 2 desde cero



mvc visual studio 2017 (1)

Acabo de Archivar -> Nuevo Proyecto anoche en un nuevo proyecto. Ah, el olor de los campos verdes.

Estoy usando el ASP.NET MVC 2 recién lanzado (es decir, no hay una vista previa o un candidato de lanzamiento, lo real), y pensé que comenzaría bien usando Ninject 2 (también versión lanzada) con las extensiones MVC. 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í a la carpeta Libraries en mi proyecto (para que pueda arrastrarlos en el control de fuente y siempre tener la versión correcta en todas partes). No incluí los archivos .xml correspondientes, ¿debería? ¿Ofrecen intellisense o alguna otra función? No es un gran problema, creo.

Anyhoo, seguí el consejo más actualizado que pude encontrar; Hice referencia a los archivos DLL en mi proyecto MVC2, luego fui a trabajar en Global.asax.cs. Primero lo hice heredar de NinjectHttpApplication. Eliminé el método Application_Start () y anulé OnApplicationStarted () en su lugar. Aquí está ese método:

protected override void OnApplicationStarted() { base.OnApplicationStarted(); AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); }

Y también seguí el consejo de VS e implementé el método CreateKernel:

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

Eso es todo. No hay otras modificaciones al proyecto.

Notarás que el método RegisterAllControllersIn () está comentado en dos lugares arriba. He pensado que puedo ejecutarlo en tres combinaciones diferentes, todas con sus efectos secundarios originales;

  • Correrlo como arriba.

Luego me presentan la página estándar "Bienvenido a ASP.NET MVC" en todo su esplendor. Sin embargo, después de que esta página se muestra correctamente en el navegador, VS me muestra una excepción que se lanzó. Lanza NinjectControllerFactory.GetControllerInstance (), que se invocó con un valor NULL en el parámetro controllerType. Tenga en cuenta que esto sucede después de que se muestre la página / Inicio - 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? Realmente no tengo ni idea. Al presionar F5 en este momento, vuelvo al navegador, no tengo quejas allí.

  • Descomentando el método RegisterAllControllersIn () en CreateKernel ()

Aquí es donde las cosas realmente están comenzando a ser originales. Ahora recibo un error 404. Algunas veces también obtuve una ArgumentNullException en la línea RegisterAllControllersIn (), pero eso es bastante raro y no he podido reproducirlo.

  • Descomentando el método RegisterAllControllers () en OnApplicationStarted ()

(Y poniendo el comentario en el de CreateKernel ())

Resultados en el comportamiento que parece exactamente como en el punto 1.

Entonces, para evitar que continúe para siempre, ¿hay una guía exacta paso a paso sobre cómo configurar un proyecto MVC 2 con Ninject 2 (ambas versiones de lanzamiento no beta) para obtener los controladores provistos por Ninject? Por supuesto, comenzaré a proporcionar algunas cosas reales para la inyección (como objetos y repositorios de ISession, registradores, etc.), pero pensé que primero podría funcionar.

¡Cualquier ayuda será muy apreciada!

(También publicado en el Ninject Google Group)


Me siento sucio respondiendo mi propia pregunta, pero para el beneficio de cualquiera que pueda vagar en esto ...

Esto no es un problema de Ninject, realmente, parece ser un problema con Cassini (el servidor web integrado en VS2k8), que maneja estas solicitudes de forma diferente a como lo haría IIS. La razón básica es que la aplicación recibe una solicitud de favicon.ico, que Cassini envía a MVC, y Ninject no sabía cómo manejarlo.

Ian Davis solucionó un error en un corto período de tiempo, y también recomendó agregar una ruta de ignorar para evitar este problema específicamente mientras se desarrolla. Simplemente agregue lo siguiente a su configuración de ruta:

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

¡Espero que esto ayude a alguien!