Мы находимся на последних этапах создания веб-сайта с довольно высоким трафиком (около 6 миллионов показов страниц в неделю) и используем LinFu в качестве контейнера IoC в новой архитектуре.
У нас довольно стандартная настройка:
Web Layer
|
IServices <- Services Implementation
|
IDataRepository <- DataRepository Implementation
|
DataBase
На веб-уровне у нас есть экземпляр LinFu ServiceContainer (единичный элемент в нашей реализации), который предоставляет экземпляры объектов Services в соответствии с требованиями страниц. Каждый из классов в сборке DataRepository также создается одним и тем же способом (каждый конструктор Services принимает необходимые ему интерфейсы объектов DataRepository).
Быстрый пример:
IWeatherServices
{
Weather GetForecast();
Weather GetPrediction();
}
[Implements(typeof(IWeatherServices))
WeatherServices(IWeatherForecastRepository, IWeatherPredictionRepository) : IWeatherServices
{
// implementation of methods
}
(и аналогичные функции снова для классов DataRepository)
В настоящее время мы оставили тип жизненного цикла по умолчанию (я считаю, что это PerRequest).
Мои основные вопросы:
- Должны ли мы хранить ServiceContainer как единое целое в веб-приложении?
- Должен ли LifecycleType для реализующих классов оставаться значениями по умолчанию?
Я знаю, что это немного открытый процесс, но мы находимся в процессе настройки во время нагрузочного тестирования, поэтому меня очень интересует общее мнение.