Свободно отображать сборки / объекты во время выполнения - PullRequest
1 голос
/ 29 февраля 2012

Простой вопрос, я готов поспорить, не очень простой ответ.

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

Теперь подумайте о NHibernate, особенно с Fluent Mappings.

Соедините их вместе, и у вас будет отличная и стабильная "базовая" система, НО, как вы загружаете отображения, представленные из внешних сборок? Я понимаю, что система должна будет загружать сборки на лету, используя отражение, но как вы сконфигурируете nHibernate, при первом запуске, чтобы понять, что из этих сборок должны быть загружены дополнительные объекты? Как вы на них ссылаетесь?

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

Я также знаю, что это может быть несколько достигнуто с помощью Dependancy Injection, но я не хочу идти по этому пути и не хочу иметь при себе экстремальный багаж.

Если обычный старый файл конфигурации nHiberante можно изменить и затем ссылаться на него во время выполнения, чтобы отразить новые сущности, я могу только предположить, что должен быть способ сделать это свободно.

Кроме того, основываясь на ответах: вы делаете конфигурацию из базового проекта или сборки DATA ACCESS?

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 01 марта 2012

Вы можете передать объект конфигурации NHibernate на Fluently.Configure(). Таким образом, вы можете обновить конфигурацию. Когда вы это сделаете, вам нужно заново создать фабрику сеансов, как вы сказали.

Вы можете сканировать сборки в папке bin для сборок, которые содержат классы отображения (Assembly.Load, затем отметьте

).
Assembly.GetExportedTypes()
        .Any(x => x.IsClass
               && !x.IsAbstract
               && typeof(IMappingProvider).IsAssignabledFrom(type))

или аналогичный) и добавьте сборку. После сканирования всех сборок (повторно) создайте фабрику сеансов.

Я делаю нечто похожее в написанной мной расширяемой среде приложения (хотя я перешел с Fluent NHibernate на отображение NHibernate по коду, но принципы схожи).

...