2010-09-19 6 views
0

J'utilise StructureMap pour l'injection de dépendances et je souhaite y injecter des sessions NHibernate. J'ai le code suivant:Gestion des dépendances imbriquées de StructureMap

private static Container _container { get; set; } 

static MyClass() 
{ 
    _container = new Container(r => 
    { 
     r.For<ISessionFactory>().Singleton() 
      .Use(NHibernate.GetSessionFactory()); 

     r.For<ISession>().HybridHttpOrThreadLocalScoped() 
      .Use(_container.GetInstance<ISessionFactory>().OpenSession()); 
    }); 
} 

Cependant, je ne peux pas empêcher de penser que le référencement _container à partir de l'initialisation du _container semble maladroit. Est-ce une pratique acceptable? Est-ce que ça va se retourner contre la route? Y a-t-il un meilleur moyen? Comment gérez-vous les dépendances qui nécessitent la création d'une autre dépendance pour se créer?

Répondre

2

Il semble inutile d'utiliser une référence à une instance du conteneur à l'intérieur du conteneur. Vous avez accès au conteneur à l'intérieur de la méthode Use via un lambda. Cela permettra de s'assurer que l'instance est récupérée chaque fois que vous êtes dans un nouvel HttpContext. Il me semble que votre chemin va créer un singleton puisque le _container.GetInstance<ISessionFactory>().OpenSession() ne sera exécuté qu'une seule fois lors de la configuration.

+0

C'est exactement ce que je cherchais. Merci. J'ai manqué la surcharge qui a fourni le conteneur pour une expression lambda. – Chris