StructureMap嵌套依赖项处理

时间:2010-09-19 04:17:37

标签: dependency-injection structuremap

我正在使用StructureMap进行依赖注入,我想用它注入NHibernate会话。我有以下代码:

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似乎很尴尬。这是可接受的做法吗?是否会在路上适得其反?有没有更好的办法?如何处理需要创建另一个依赖项以创建自己的依赖项?

1 个答案:

答案 0 :(得分:2)

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

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

这将确保每次进入新的HttpContext时都会获取实例。在我看来,你的方式会创建一个单例,因为_container.GetInstance<ISessionFactory>().OpenSession()只会在配置时执行一次。