2009-08-11 3 views
1

Приложение, в котором я сейчас работаю, сильно использует шаблон хранилища с NHibernate. У нас есть общий базовый класс репозитория, который реализует стандартные методы получения и сохранения. Этот класс затем наследуется репозиториями для каждого типа. Эти репозитории могут затем добавить свои собственные типы специфических методов (и переопределение сохраняет и получает, если необходимо).Образец репозитория - поиск репозитория на основе типа

Это хорошо работает, и из-за разнесения проблем точка зрения означает, что наши бизнес-объекты являются POCO, а наши классы хранилища обрабатывают специфику сохранения. практически, однако было бы очень полезно, когда у нас есть тип, который сможет сказать «Получите мне репозиторий, который может сохранить этот тип». Какие шаблоны можно использовать для этого? Нужно ли мне поддерживать собственную таблицу поиска? может ли таблица поиска автоматически поддерживаться?

ответ

6

Похоже, вы готовы к Dependency Injection Framework

0

Используя отражение и некоторые соглашения об именах, например:

DomainObjectNameRepository

Вы можете динамически создать экземпляр хранилища, которую вы ищете с помощью Activator.CreateInstance. По мере того как вы знаете, как они названы, используя пример в качестве примера выше. В другом случае у вас также есть шаблон реестра. Создайте элемент отображения внутри файла web.config, а затем вы можете получить метод в реестре, называемом ResolveRepository.

Registry.ResolveRepositoryFor<T>() where T:DomainObject; 

Еще один бонус к тому, что вы можете использовать IOC с ним, инверсию управления с примером Unity.

Файл сопоставления будет отображать DOmainObject в репозиторий, а затем внутри метода реестра он может затем использовать Unity для разрешения экземпляра этого конкретного репозитория, например, и иметь их как экземпляры singleton.

Эндрю

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