2010-10-29 4 views
0

J'ai un objet de profil en session avec des informations de profil pour l'utilisateur actuellement connecté. Je veux être capable de l'injecter dans mes classes d'affaires afin que je puisse faire la validation etc. sans avoir à le passer dans la liste des paramètres dans chaque méthode.Ninject, comment injecter un objet vivant dans la session dans ma classe business?

J'ai essayé quelque chose comme ça dans mon module ninject:

Profile profile = HttpContext.Current.Session["Profile"] as Profile; 
Bind<Profile>().ToConstant(profile).InTransientScope(); 

Cependant, il explose en référence nulle quand je fais Kernel.Get() dans mon ASPX. BusinessObject prend un profil via le constructeur. Si je code dur le profil au lieu d'utiliser le HttpContext alors tout semble fonctionner. Je ne suis pas sûr que ToConstant soit la solution, je cherche vraiment quelque chose qui sera évalué chaque fois qu'un nouveau BusinessObject est créé.

MISE À JOUR

Il semble que demander injection se produise sur une ligne d'objet de niveau de la page est trop tôt pour la collecte de la session soit disponible. Si je me déplace dans l'appel Kernel.Get à Page_Load cela fonctionne très bien.

Répondre

5

Je pense que ce qui arrive à votre code est, au moment de la création de la liaison, le profil de session est nul.

Vous avez probablement besoin de faire quelque chose comme ceci:

Bind<Profile>() 
    .ToMethod(context => 
     HttpContext.Current.Session["Profile"] as Profile); 
+0

HttpContext.Current.Session semble être nulle au moment court .ToMethod. – e36M3

+1

Essayez de définir un point d'arrêt sur votre constructeur BusinessObject. Utilisez la fenêtre immédiate pour évaluer HttpContext.Current.Session ["Profil"] et voir si votre objet de profil est là. Assurez-vous également que son type est Profil. Si ce n'est pas là, vous pourriez avoir un autre problème. –

+0

Le problème est que HttpContext.Current.Session est null, ce qui signifie que la collection entière est null. Je peux facilement accéder à HttpContext.Current.User, et cela donne l'identité. C'est presque comme si l'injection avait lieu avant que la collection Session soit en quelque sorte exposée. – e36M3

Questions connexes