1

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

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

  • претензии Компонент
    • претензии Услуги по обработке
    • Претензия Repository
  • Billing Компонент
    • Billing Service
    • Billing Repository
  • политики Компонент
    • PolicyLockService
    • Политика Repository

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

Я знаю модель «Единица работы» и множество образцов там, но ни один из них не показал DI. Я также подвержен влиянию [ThreadStatic], потому что этот материал также можно использовать из WCF, и я нашел достаточно сообщений, описывающих, как это сделать. Я читал о Business Conversations, но вам нужно что-то простое, что каждое приложение для 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(); 


    } 

} 
+0

Вы можете сделать это с помощью AsSingleton в конфигурации StructureMap , но вы, вероятно, не хотите использовать один сеанс для всех приложений. – Paco

+0

Правильно, я не хочу использовать один для каждого приложения. –

+0

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

ответ

2

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

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

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

0

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

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

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

http://blog.coreycoogan.com

Смежные вопросы