【问题标题】:StructureMap nested dependency handlingStructureMap 嵌套依赖处理
【发布时间】:2010-09-19 16:26:17
【问题描述】:

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

【问题讨论】:

    标签: dependency-injection structuremap


    【解决方案1】:

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

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

    这将确保每次您在新的 HttpContext 中时都会获取该实例。在我看来,您的方式将创建一个单例,因为 _container.GetInstance&lt;ISessionFactory&gt;().OpenSession() 只会在配置时执行一次。

    【讨论】:

    • 这正是我想要的。谢谢。我错过了为 lambda 表达式提供容器的重载。
    猜你喜欢
    • 2022-12-15
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2022-01-26
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多