0

Я все еще новичок в инъекции зависимостей, и кажется, что я чего-то не хватает.Autofac конфигурирование NHibernate ISession для разрешения null

Я использовал Autofac в качестве контейнера для разрешения каждой зависимости репозиториев до сеанса NHibernate.

Сессия получает зависимость SystemSetting, которая в значительной степени состоит только из строки подключения MySql.

В начале приложения я настраиваю всю зарегистрированную зависимость, включая инициализацию SessionFactory.

Дело в том, что если строка подключения неверна, приложение выдает исключение времени компиляции, которое не может подключиться к MySql с предоставленной строкой соединения. Что, если я хочу разрешить эту неправильную конфигурацию, чтобы пользователь мог установить собственный собственный, допустим, IP-адрес?

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

Должен ли я исключать создание сеанса NHibernate из конфигурации Autofac?

+0

Я уверен, что вам было бы лучше, если бы вместо «ISession» было введено одноразовое «ISessionFactory» с ограничением продолжительности жизни. И вы можете отключить проверку зарезервированных ключевых слов при создании фабрики сеанса, чтобы приложение не разбилось. –

+0

Я не уверен, что буду следовать. Singleton lifetime ISessionFactory означает, что каждый репозиторий получит ISessionFactory для своей зависимости, а затем создал ISession после этого. Так ли это? И я ничего не могу понять о зарезервированных ключевых словах. Пожалуйста, уточните больше, извините за беспокойство. –

+1

Это означает, что каждому компоненту вводится * один экземпляр 'ISessionFactory', и каждый из этих компонентов создает свою собственную' ISession' (или несколько «ISessions», если это необходимо). Что касается проверки ключевых слов, то по умолчанию NHibernate подключается к базе данных при создании 'ISessionFactory' для проверки зарезервированных ключевых слов (это для создания схемы/DDL). Вы можете отключить это, поэтому первое подключение к базе данных будет сделано при первом использовании «ISession». –

ответ

1

Я уверен, что вам было бы лучше, если бы впрыскивали одноцелевую погоду ISessionFactory вместо ISession.

Это означает, что для каждого компонента вводится один экземпляр ISessionFactory, и каждый из этих компонентов создает собственный ISession (или несколько ISessions, если необходимо).

Что касается проверки ключевых слов, по умолчанию NHibernate ненадолго соединяется с базой данных при построении ISessionFactory для проверки зарезервированных ключевых слов (для создания схемы/DDL). Вы можете отключить это, поэтому первое соединение с базой данных будет выполнено с использованием первого ISession.

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