2009-06-07 5 views
5

Je suis aux prises avec la documentation pour comprendre exactement ce dont j'ai besoin. La documentation (à ma compréhension) est pour 1.5 de toute façon.Est-ce que quelqu'un connaît un bon guide pour que Ninject 2 fonctionne dans ASP.NET MVC?

NB: Je ne veux pas prolonger NinjectHttpApplication

Je l'ai configuré pour utiliser le NinejctControllerFactory dans Application_Start() mais je reçois une exception de référence null sur la KernelContainer.Kernel lorsqu'il essaie de créer un contrôleur. Où dois-je configurer le noyau si je ne prolonge pas NinjectHttpApplication?

+0

Quelle est la raison pour laquelle vous ne voulez pas étendre NinjectHttpApplication? –

+0

Je suis déjà étendre une autre coutume HttpApplication – joshcomley

Répondre

2

Jetez un oeil à cet article de blog. Cela devrait aider à clarifier le processus que vous devez effectuer pour configurer le noyau.

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

+1

Ceci est toujours basé sur dériver de NinjectHttpApplication. –

+0

Quand il dit étendre, veut-il dire dériver/hériter? –

+0

Voilà comment je l'ai interprété. Mais, c'est une bonne question. –

0

Vous devez toujours coller le code que vous avez afin que les gens puissent voir où vous pourriez avoir mal tourné.

Je pense que ce code devrait être placé dans votre Application_Start:

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

J'ai donné à peu près mon code en ce que tout ce que j'ai jusqu'ici est la configuration de la fabrique du contrôleur. Cela ne semblait pas trop le valoir pour une ligne! Aussi, c'est pour v1 de Ninject. Je suis intéressé par v2. – joshcomley

+0

Je ne vois pas vraiment de code, ni de trace de pile détaillée ou quoi que ce soit d'autre.La solution semble évidente, alors je veux m'assurer que vous faites au moins l'évidence. J'ai manqué la partie de ninject 2 (vu seulement 1.5 dans le corps), ainsi j'ai mis à jour ma réponse avec ce que je pense est bon pour Ninject 2. – Talljoe

5

Puisque vous étendons déjà une autre classe HttpApplication dérivée, mes pensées sont juste copier le code source correspondant de la classe NinjectHttpApplication dans votre classe HttpApplication étendue. Plutôt que de couper et coller, il suffit de regarder le source pour NinjectHttpApplication dans le projet d'extension Ninject2 Ninject.Web.Mvc here.

Je copier spécifiquement la substance dans Application_Start() et Application_Stop() méthodes. Les autres méthodes d'enregistrement des contrôleurs sont sympas, mais vous pouvez enregistrer vos contrôleurs comme vous le souhaitez. Vous remarquerez dans le Application_Start(), le noyau est créé en appelant la fonction virtuelle pure CreateKernel() - vous pouvez simplement créer votre noyau en ligne ici. De plus, notez la présence de la propriété Kernel sur la classe NinjectHttpApplication - Je la copierais également dans votre propre classe. Il semblerait que l'intention ici est que la classe dérivée de HttpApplication serve effectivement de KernelContainer. Clause de non-responsabilité: Je n'ai pas essayé de voir si cela fonctionne, mais je serai bientôt. J'ai utilisé Ninject 1.x dans un projet web et j'ai l'intention de passer à Ninject 2 dans un proche avenir; Cependant, je serai probablement capable de dériver directement de NinjectHtppApplication. Bonne chance!

2

Ne pas être en mesure de tirer de NinjectHttpApplication n'est pas une grosse affaire. Ce n'est pas trop, c'est très pratique. La suggestion de Peter Meyer est la voie à suivre. Il suffit de consulter la source here. Cependant, vous devrez hériter de IHaveKernel.