Отказ от ответственности: я знаю, что моё моделирование репозитория, вероятно, неверно, и я реорганизую его перед отправкой приложения.Но что я действительно хочу знать, так это о Dispose (), одно из моих сомнений связано с этой неправильной реализацией, но я надеюсь, что ответы, которые я получу здесь, помогут лучше понять этот метод для других частей моего приложения.
Так почему я считаю, что мой репозиторий неправильный?Я использую nhibernate, и из моих первых уроков, которые я прочитал, в приведенных примерах использовалось ключевое слово «using» в каждом методе репозитория (add, find, findall и т. Д.).Когда я начал нуждаться в отложенной загрузке, возникли проблемы, поэтому в своих поисках я наткнулся на статью Айенде в журнале MSDN об использовании nhibernate для настольных приложений, и это именно мой случай.По сути, уместно отметить, что докладчик (формы?) Должен контролировать сессию, а не ответственность хранилищаТак что я в основном поступил противоположно тому, что он сказал, потому что по какой-то причине (я действительно не помню) в то время я не хотел помещать ссылку на nhibernate как в проекте домена (который содержит мои репозитории nhibernate), так и впроект пользовательского интерфейса.Возможно, потому что я не хотел связывать пользовательский интерфейс с инфраструктурой ... В любом случае, я отвлекся.
Суть в том, что мои репозитории держат сессию открытой, пока они мне не нужны.И когда мне нужен какой-то доменный сервис, которому нужен репозиторий, я передаю его из формы.Но только потому, что этот репозиторий содержит сеанс, который мне нужно поддерживать во время запроса на услуги.
Например, у меня есть ComboBox, который заполняется сущностями «Материалы», полученными через репозиторий.Когда пользователь выбирает один, я передаю его методу GetPricesPerMaterial(Material x)
«EstimatesCalculator», которому в конструкторе нужны репозитории, переданные ему формой, которую он назвал.Итак, мои репозитории являются IDisposable, потому что Session является IDisposable.Я вызываю Session.Dispose () в моих репозиториях Dispose ().
Теперь возникает вопрос: только потому, что службы (например, «EstimatesCalculator») содержат ссылку на IDisposable, они тоже должны быть IDisposable?Я уверен, что я буду распоряжаться этими ссылочными IDisposables в формах, которые они создали и передали в Службы, поэтому я думаю, что мне не нужно вызывать Repository.Dispose () в службах, но мне нужно, скажем, установитьэти ссылки на нуль или что-то?