代码之家  ›  专栏  ›  技术社区  ›  Chris

StructureMap嵌套依赖关系处理

  •  0
  • Chris  · 技术社区  · 14 年前

    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());
        });
    }
    

    但是,我不得不认为从容器的初始化中引用容器似乎很尴尬。这是可以接受的做法吗?会不会事与愿违?有更好的办法吗?如何处理需要创建另一个依赖项才能创建自己的依赖项?

    1 回复  |  直到 14 年前
        1
  •  2
  •   PHeiberg    14 年前

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

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

    这将确保每次在新的HttpContext中获取实例。在我看来,你的方式将创造一个单身自 _container.GetInstance<ISessionFactory>().OpenSession() 仅在配置时执行一次。