NHibernate Session DI из StructureMap в компонентах - PullRequest
1 голос
/ 22 января 2010

Я знаю, что это отчасти мертвая лошадь, но я не нахожу удовлетворительного ответа. Прежде всего, позвольте мне сказать, что я НЕ имею дело с веб-приложением, иначе управлять NH Session довольно просто.

У меня есть куча корпоративных компонентов. Эти компоненты имеют свой собственный сервисный уровень, который будет работать с несколькими хранилищами. Например:

  • Компонент заявки
    • Служба обработки претензий
    • Репозиторий заявок
  • Компонент биллинга
    • Биллинговая служба
    • Хранилище счетов
  • Компонент политики
    • PolicyLockService
    • Хранилище политик

Теперь у меня может быть консоль или приложение для Windows, которое должно координировать операцию, которая включает в себя каждую из служб. Я хочу написать сервисы, в которые будут внедрены (DI) их необходимые репозитории. В репозитории должен быть вставлен сеанс ISession или аналогичный, чтобы я мог выполнить эту операцию в рамках одной транзакции ISession / IT.

Мне известно о паттерне Unit Of Work и множестве сэмплов, но ни один из них не показал DI. Я также с подозрением отношусь к [ThreadStatic], потому что этот материал также можно использовать из WCF, и я нашел достаточно постов, описывающих, как это сделать. Я читал о бизнес-беседах, но мне нужно кое-что простое, чтобы каждое приложение для Windows / консоли могло легко загрузиться, так как у нас есть много этих приложений и несколько довольно неопытных разработчиков.

Так как я могу настроить StructureMap для внедрения одной и той же сессии ISession в каждый из зависимых репозиториев из приложения? Вот полностью надуманный и полностью составленный пример без использования SM (только для пояснения - не тратьте энергию на критику):

ConsoleApplication

Main
{

  using(ISession session = GetSession())
  using(ITransaction trans = session.BeginTransaction())
  {
    var policyRepo = new PolicyRepo(session);
    var policyService = new PolicyService(policyRepo);

    var billingRepo = new BillingRepo(session)
    var billingService = new BillingService(billingRepo);

    var claimRepo = new ClaimsRepo(session);

    var claimService = new ClaimService(claimRepo, policyService, billingService);

    claimService.FileCLaim();

    trans.Commit();


  }

}

Ответы [ 2 ]

2 голосов
/ 26 мая 2010

Я наконец-то добрался до некоторых постов на StructureMap, которые могут помочь некоторым людям.

Во-первых, учебник для начинающих, который имеет отношение к следующим постам: http://blog.coreycoogan.com/2010/05/24/using-structuremap-to-configure-applications-and-components/

Теперь, как использовать SM с WCF и NHIbernate: http://blog.coreycoogan.com/2010/05/26/structuremap-wcf-nhibernate-part-1/

0 голосов
/ 24 января 2010

Я думаю, что теперь у меня есть недостающий кусок головоломки. Джереми Д. Миллер был достаточно любезен, чтобы опубликовать свой код для ITransactionProcessor.

http://codebetter.com/blogs/jeremy.miller/archive/2010/01/06/how-dovetail-uses-structuremap-with-nhibernate.aspx

При этом будут использоваться новые вложенные контейнеры StructureMap для охвата моего сеанса всеми моими компонентами в одной транзакции. Когда я это заработаю, я опубликую код в своем блоге и обновлю эту ветку.

http://blog.coreycoogan.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...