Структурная обработка вложенных зависимостей - PullRequest
0 голосов
/ 19 сентября 2010

Я использую 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 Ответ

2 голосов
/ 19 сентября 2010

Кажется ненужным использовать ссылку на экземпляр контейнера внутри контейнера. У вас есть доступ к контейнеру внутри метода Use через лямбду.

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

Это обеспечит выборку экземпляра каждый раз, когда вы находитесь в новом HttpContext. Мне кажется, что ваш способ создаст синглтон, поскольку _container.GetInstance<ISessionFactory>().OpenSession() будет выполнен только один раз при настройке.

...