Je démarre une application Web avec MVC3 et Ninject. Il y a une dépendance dont j'ai aussi besoin dans le fichier global.asax qui doit être un singleton.
Je pensais que cela devrait être comme ceci: p> mais je a vu que alors j'ai essayé comme ceci: p> _auth code> est null lorsque
mvcapplication_authenticateRequest code> est appelé. p>
public class MvcApplication : NinjectHttpApplication
{
ItUserAuthentication _auth;
IKernel _kernel;
public MvcApplication()
{
_kernel = new StandardKernel(new SecurityModule());
_auth = _kernel.Get<IUserAuthentication>();
base.AuthenticateRequest += new EventHandler(MvcApplication_AuthenticateRequest);
}
protected override IKernel CreateKernel()
{
return _kernel;
}
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
_auth.ToString();
}
4 Réponses :
Déplacez le code du constructeur vers Ce sont les différents gestionnaires d'événements que vous pouvez potentiellement avoir dans votre global.aSax.cs: p> Application_Start CODE> Méthode. Je crois que même si plusieurs instances httpApplication sont créées, Application_Start s'appelle une seule fois, et cela aussi sur la 1ère instance seulement. Faites-moi savoir si cela a résolu votre problème.
Non ça ne le fait pas. J'ai fait cela et quand mvcapplication_authenticateequest est appelé, _auth est toujours null :(
L'extension MVC injecte le HTTPApplication par défaut. Mais seule une injection de propriété peut être utilisée! Ajoutez simplement une propriété décorée avec l'attribut injecteur. P>
Cela ne fonctionne pas non plus. _Auth est null quand mvcapplication_authenticateequest est appelé
@vtortuola, utilisez-vous la dernière version de NIJOJECT MVC3? La propriété devrait ressembler à ceci: [injecter] l'authentification publique authentification {obtenir; ensemble; }
J'ai eu "ninject.web.mvc3-2.2.1.0-release-net-4.0.zip", je pense que c'est la dernière version. J'ai essayé ça et ça n'a pas fonctionné
@vtortuola J'avais un coup d'oeil au code. Avec l'introduction du package Nuget, cette fonctionnalité a été brisée. Comme je mettez en train de mettre à jour les packages Nuget de toute façon à Nuge 1.2, je vais résoudre ce problème dans les journées de ventilation.
BTW me donne un cri ici quand vous le réparerez: d. mille mercis :)
@vtortola corrigé dans ninject.extensions.mvc3 v2.2.0
@REMO GLOOR, qui est étrange, je viens de recevoir la dernière via Nuget (bien que suffisamment, le Nuget Ninject Nuget est la version 2.2.1.4 tandis que Ninject.org a 2.2.2.0, Ninject.mvc3 via Nuget est 2.2.2.0) et utilise une injection de propriété comme: [Injecter] Logger d'ILogger public {Obtenir; ensemble; } conduit toujours à une référence nulle dans Application_Start. Est la dernière dernière sur Nuget non mis à jour ou? Et je suppose que par ninject.extensions.mvc3 v2.2.2.0 Vous voulez dire NINJECT.MVC3 V2.2.2.0.
Le site Web est un peu derrière (2.2.0.0) car il est compliqué ATM de la mettre à jour. MVC3 et NInject n'ont pas les mêmes versions. Ils sont mis à jour inubituellement. Mais toutes les combinaisons de version 2.2.x.x vont travailler ensemble. Sur GitHub et Nuget, vous trouverez toujours la dernière version. Ils diffèrent probablement sur le numéro de construction, mais dans ce cas, ils sont construits à l'aide du même code source et ne constituent que des scripts ou des tests d'unité ont changé dans ce cas.
@REMOGLOOR HEY REMO, cela fonctionne-t-il avec des référentiels liés à IndrequestScope? Cela semble après avoir essayé d'ajouter une injection de propriété du référentiel dans Global.Asax j'ai commencé à obtenir ObjectContext déjà éliminé des erreurs dans mes applications. Pas de problèmes si je retire l'injection de la propriété ...
@B Z injecte un objet avec la durée de vie d'une demande dans un objet qui a une durée de vie plus longue n'a aucun sens. Un objet ne doit dépendre que des objets avec le même cycle de vie ou un cycle de vie plus long.
@Remogloor Ah, je pense que je vois le lien manquant ... La vie de la vie pour httpApplication n'est-elle pas inrequestScope? Je n'ai pas regardé le SRC, quelle est la durée de vie de httpApplication? Mon cas d'utilisation doit faire avec authentification. J'ai un repo pour obtenir des informations utilisateur pour une identité personnalisée. Il est demandé de postauthenticate
@B Z httpApplication est géré par IIS. Normalement, ils sont réutilisés pour plusieurs demandes, mais ils peuvent être disposés et un nouveau recréé pendant la durée de vie des applications. Donc, c'est quelque chose entre une demande et un singelton. Pour des informations détaillées, regardez sur MSDN.
Voici comment nous le faisons, j'ai fait des tests et mon authservice semble aller dans son contrôleur une seule fois: espère qu'il aide! p> p>
N'est-ce pas un coup de tuer le fait qui appelle dépendancesResolver dans chaque demande.
Je ne le pense pas, @Remo devrait pouvoir vous dire plus que moi, mais depuis que j'injecte mon _authservice dans la majeure partie de mon contrôleur dans le constructeur, il fait probablement la même chose et ne "coûter" que "
super. Je pense que cela fera jusqu'à @Remo résoudre le problème. Mille mercis.
Heureux ça aide, mon plaisir :)