Вот лишь краткий обзор того, что я нашел наилучшим образом вписать в нашу архитектуру приложений WinForms (на основе MVP).
Каждый докладчик зависит от конструктора, который ему нужен, например, если у вас есть InvoicePresenterтогда у вас будет InvoiceRepository в качестве зависимости, но, вероятно, у вас будет CustomerRepository и многие другие в зависимости от сложности (CustomerRepsitory для загрузки всех клиентов в поле со списком клиентов, если вы хотите изменить клиента в счете, и все в таком духе).Затем каждый репозиторий имеет аргумент-конструктор для UnitOfWork.Либо вы можете абстрагировать сеанс с помощью шаблона UnitOfWork, либо вы можете сделать так, чтобы ваши репортеры зависели от ISession.
Все связано между собой контейнером IoC, где мы создаем презентаторов на основе «контекста».Это очень простая концепция, контекст для каждого докладчика и для всех подчиненных, который, в свою очередь, мы создаем как составной блок более сложных докладчиков, чтобы уменьшить сложность (если, например, у вас есть несколько вкладок с опциями для редактирования какого-либо объекта или чего-то еще).
Таким образом, на практике этот контекст основан на 90% временной формы, потому что одна форма - это как минимум один докладчик / представление.
Итак, чтобы ответить на ваши вопросы:
Сеанс для докладчика и сеанс для разговора (также работает с WinForms) - это только реально используемые шаблоны (и открывающие закрытые сеансы везде, но не очень хороший способ справиться с этим) -
это лучше всего решить, если репозитории зависят от сессии, а не от докладчиков.Вы делаете докладчиков зависимыми от репозиториев, репозитории зависят от сеанса, а когда вы создаете все, вы даете им общий сеанс;но, как я еще раз заявляю, это практично только тогда, когда это делается в контексте.Вы не можете поделиться сеансом для счетов, редактирующих докладчика, и других клиентов, редактирующих докладчика;но вы можете поделиться сеансом при редактировании счета через основного докладчика, а также сведения о счете и примечаниях к счету-суб-докладчику.
Уточните, не понял этого ...