У меня есть проект MVC3, который использует Unity для внедрения зависимостей.
Существует основной проект MVC3, библиотека классов «домен», которая находится между MVC3 и уровнем данных, и набор библиотек классов, составляющих уровень данных.
(MVC3) - (домен) - (уровень данных)
Это пример одного из конструкторов служб в классе домена:
public DomainModelCacheServices(
Data.Interface.ICountryRepository countryRepository,
Data.Interface.ILanguageRepository languageRepository,
Data.Interface.ISocialNetRepository socialNetRepository
)
Каждый раз, когда вызывается контроллер с DomainModelCacheServices в своем конструкторе, создается новый объект DomainModelCacheServices, а также три класса репозитория в конструкторе DomainModelCacheServices.
Я не могу поверить, что это эффективно!
Что еще хуже, так это то, что класс DomainModelCacheServices является классом кеша. Он загружает списки данных, которые никогда не меняются, и хранит их как статические. Но для каждой ссылки все еще необходимо создать три класса репозитория!
Если я предоставлю DomainModelCacheServices время жизни одиночного (навсегда), я должен убедиться, что он поточно-ориентирован, а если придет день, когда я получу сотни обращений, будет много блокировок.
Я мог бы изменить конструктор на это:
public DomainModelCacheServices(
IServiceLocator serviceLocator
)
Я не знаю почему, но это выглядит не так. Конструктор теряет смысл, и мне приходится ссылаться на Unity в классе домена и каким-то образом информировать класс домена о ServiceLocator, принадлежащем приложению MVC3. Может быть, ослабленная муфта может быть слишком ослаблена?
Может быть, создание всех этих классов не так неэффективно, как кажется, мне не стоит об этом беспокоиться?
Было бы неплохо, если бы Unity поддерживал параметры конструктора «Lazy». Но это не так.
Итак, есть ли какие-нибудь идеи о том, как сделать проект MVC3 + Unity более эффективным, особенно при разработке модели предметной области?
Спасибо за чтение!