У меня есть веб, который был построен с использованием ASP.NET MVC 1.0. Он использует Structuremap в качестве контейнера IOC.
Часть IOC хорошо работает, если я зарегистрирую ее в Application_Start следующим образом:
ObjectFactory.Initialize(service =>
{
service.ForRequestedType<IOrderRepository>()
.TheDefaultIsConcreteType<OrderRepository>()
.CacheBy(InstanceScope.PerRequest);
});
Я должен использовать один и тот же бэкэнд в службе Windows.
В сервисе есть несколько таймеров, которые одновременно обращаются к OrderRepository, поэтому здесь важна многопоточность.
Моя первая идея - зарегистрировать его в конструкторе сервиса следующим образом:
public Service1()
{
ObjectFactory.Initialize(service =>
{
service.ForRequestedType<IOrderRepository>()
.TheDefaultIsConcreteType<OrderRepository>()
.CacheBy(InstanceScope.PerRequest);
});
}
Это правильное место и правильный параметр для кэширования?
Читая документацию Structuremap , я думаю, что самый безопасный способ - использовать настройку по умолчанию для кэширования:
PerRequest - Операция по умолчанию. Новый экземпляр будет создан для каждого запроса.
У меня сложилось впечатление, что PerRequest означает HttpContext , но это еще одна запись:
HttpContext - Для каждого HttpContext будет создан отдельный экземпляр. Кэширует экземпляры в коллекции HttpContext.Items
.