2010-09-19 132 views
0

我使用StructureMap进行依赖注入,我想用它注入NHibernate会话。我有以下代码: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()); 
    }); 
} 

不过,我不禁想,从_container的初始化中引用_container显得尴尬。这是一种可接受的做法吗?这是否会在道路上倒退?有没有更好的办法?你如何处理需要创建另一个依赖来创建自己的依赖关系?

回答

2

似乎没有必要使用对容器内容器实例的引用。您可以通过lambda访问Use-method内的容器。

r.For<ISession>().HybridHttpOrThreadLocalScoped() 
    .Use(c => c.GetInstance<ISessionFactory>().OpenSession()); 

这将确保每次在新的HttpContext中获取实例。它看起来像你的方式将创建一个单身人士,因为_container.GetInstance<ISessionFactory>().OpenSession()将只配置一次执行。

+0

这正是我所期待的。谢谢。我错过了为lambda表达式提供容器的重载。 – Chris 2010-09-19 17:39:23