Обычно вы настраиваете свои соглашения (а также оставшуюся часть вашей свободной конфигурации) в исполняемом файле.
Это означает, что у вас будет другая свободная конфигурация в вашем графическом интерфейсе, модульных тестах и во всем остальном, что потребляет ваши услуги на основе ISession
/ ISessionFactory
.
Мне кажется, что вы жестко запрограммировали свою конфигурацию и теперь пытаетесь выяснить, как заставить этот "конфигуратор" работать по-разному в зависимости от некоторой информации об окружающей среде.
Гораздо более простым способом было бы создать свою конфигурацию на верхнем уровне и предоставить ее как зависимость от того, что ей нужно. Таким образом, вы не включите один и тот же путь кода из разных сред.
Что бы это ни зависело от NHibernate, настройте его так, чтобы оно принимало ISession
или ISessionFactory
в качестве аргумента конструктора или установщика свойства. Тогда у вас не будет этой проблемы. Вы даже можете использовать его для тестов, которым на самом деле не нужно запрашивать хранилище данных.
Конечно, вы все равно можете настроить любой класс, создающий конфигурацию FNH, чтобы он был сам по себе конфигурируемым, и использовать условные операторы в строках конфигурации. Но обычно в конфигурации FNH так мало строк кода, что вряд ли стоит. Просто создайте совершенно отдельные конфигурации для SQL Server, Oracle, SQLite и т. Д. Таким образом, вам не придется постоянно поддерживать его каждый раз, когда вы вносите незначительные изменения.