2009-06-07 11 views
5

Estoy luchando con la documentación para descubrir exactamente lo que necesito. La documentación (a mi entender) es para 1.5 de todos modos.¿Alguien sabe de una buena guía para obtener Ninject 2 trabajando en ASP.NET MVC?

NB: no quiero extender NinjectHttpApplication

He configurado para utilizar el NinejctControllerFactory en Application_Start() pero me da una excepción de referencia nula en la KernelContainer.Kernel cuando intenta crear un controlador. ¿Dónde configuro el Kernel si no extiendo NinjectHttpApplication?

+0

¿Cuál es la razón por la que no desea extender NinjectHttpApplication? –

+0

Ya estoy extendiendo otra aplicación Http personalizada – joshcomley

Respuesta

2

Eche un vistazo a esta publicación de blog. Debería ayudar a aclarar el proceso que necesita realizar sobre cómo configurar el kernel.

http://www.kevinrohrbaugh.com/blog/2009/8/7/using-ninject-2-with-aspnet-mvc.html

+1

Esto todavía se basa en derivar de NinjectHttpApplication. –

+0

Cuando dice extender, ¿quiere decir derivar/heredar? –

+0

Así lo interpreté. Pero, esa es una buena pregunta. –

0

Debería pegar el código que tiene para que la gente pueda ver dónde se equivocó.

creo que este código debe ser colocado en su Application_Start:

ControllerBuilder.Current.SetControllerFactory(typeof(NinjectControllerFactory)); 
KernelContainer.Kernel = new StandardKernel(
    new AutoControllerModule(Assembly.GetExecutingAssembly(); 
); 
+0

. Le he dado mi código porque todo lo que tengo hasta ahora es configurar el controlador de fábrica. ¡No parecía valer la pena por una línea! Además, esto es para v1 de Ninject. Estoy interesado en v2. – joshcomley

+0

No veo ningún código, ni stacktrace detallado ni nada más.La solución parece obvia, así que quiero asegurarme de que al menos estás haciendo lo obvio. Me perdí la parte 2 de ninject (solo vi 1.5 en el cuerpo), así que actualicé mi respuesta con lo que creo que es correcto para Ninject 2. – Talljoe

5

Puesto que ya está extendiendo otra clase HttpApplication de origen, mis pensamientos son simplemente copiar el código fuente relevante de la clase NinjectHttpApplication en su clase extendida HttpApplication. En lugar de cortarlo y pegarlo, solo mire source para NinjectHttpApplication en el proyecto de extensión Ninject2 Ninject.Web.Mvc here.

Me gustaría copiar específicamente la materia en Application_Start() y Application_Stop() métodos. Los otros métodos para registrar controladores son agradables, pero puede registrar sus controladores como lo desee. Notarás en el Application_Start(), el kernel se crea llamando a la función virtual pura CreateKernel() - puedes simplemente crear tu kernel en línea allí mismo. Además, tenga en cuenta la presencia de la propiedad Kernel en la clase NinjectHttpApplication - Copiaría eso en su propia clase también. Parece que la intención aquí es que la clase HttpApplication-derived funciona efectivamente como KernelContainer.

Descargo de responsabilidad: No he intentado esto para ver si funciona, aunque lo haré en breve. He usado Ninject 1.x en un proyecto web y tengo la intención de actualizar a Ninject 2 en el futuro cercano; sin embargo, probablemente pueda derivar directamente de NinjectHtppApplication. ¡Buena suerte!

2

No ser capaz de derivar de NinjectHttpApplication no es un gran problema. No está haciendo demasiado, pero es muy conveniente. La sugerencia de Peter Meyer es el camino a seguir. Solo mira la fuente here. Sin embargo, tendrás que heredar de IHaveKernel.

Cuestiones relacionadas