Je développe une application web avec asp.net mvc 2, et j'utilise NHibernate (session par requête) et Unity (pour l'injection de dépendances).Résolution de la méthode avec Unity
Dans mon Global.asax je gère mon ISession quelque chose comme ceci:
public override void Init()
{
base.Init();
BeginRequest += OpenNHibernateSession;
EndRequest += DisposeNHibernateSession;
}
private static void OpenNHibernateSession(object sender, EventArgs e)
{
ManagedWebSessionContext.Bind(HttpContext.Current, _sessionFactory.OpenSession());
}
private static void DisposeNHibernateSession(object sender, EventArgs e)
{
var session = ManagedWebSessionContext.Unbind(HttpContext.Current, _sessionFactory);
if (session != null)
session.Dispose();
}
Nice, et dans mon Référentiels (dans le constructeur) Je passe le SessionFacotry (statique global.asax) e obtenir ISession par SessionFacotry.GetCurrentSession(). Mes dépôts que j'injecte dans les contrôleurs du contrecutor! Mais ..., dans mon application mvc asp.net, j'ai une valeur dans le cache et un délégué CacheRemovedItem avec ce cache. Dans cette méthode (dans delegate), j'ai besoin de conserver certaines informations dans mes reopsitories, mais je n'ai pas de requête quand le cache expire. Je voudrais savoir comment pourrais-je résoudre mes dépendances dans cette méthode (CacheItemRemoved délégué) dans le bon sens? Ou Comment puis-je configurer un ISession pour obtenir via GetCurrentSession() dans SessionFactory?
PS: Désolé pour mon anglais!
Où stockez-vous le conteneur? Dans un HttpModule? Pourquoi l'atelier de session n'est pas résolu via le conteneur? – onof
HI Onof, Le conteneur et la fabrique de sessions sont statiques sur le global.asax. Je m'initialise dans l'événement Application_Start. Dans mes dépôts, je reçois la session via GetCurrentSEssion (parce que je configure ma session par requête via ManagedWebSessionContext.Bind et ManagedWebSessionContext.Unbind.) Alors, est-ce que je dois l'installer dans ma méthode? –