У меня есть проект ASP.NET MVC5 с Unity в качестве DI-фреймворка.
Рассмотрим следующий код:
container.RegisterType<ApplicationDbContext>(
new InjectionFactory(c => new ApplicationDbContext()));
Поскольку мои репозитории используют один и тот же DbContext, было бы целесообразно передать один и тот же экземпляр всем им. Однако каждый посетитель сайта должен иметь отдельный экземпляр контекста, а не работать с одним большим экземпляром «для всего сайта». Я предполагаю, что это уменьшает возможности иметь время жизни экземпляра только для текущего запроса.
Поскольку UnityConfig.RegisterComponents()
находится в методе Application_Start()
, я думаю, он создаст только один экземпляр для всего приложения. Какова наилучшая практика в этом случае? Я подумал о следующем:
- Создайте свою собственную фабрику для DbContext, которая возвращает синглтон, и внедрите эту фабрику в мои репозитории.
- Переместить
UnityConfig.RegisterComponents()
вApplication_BeginRequest()
Я попытался найти InjectionFactory на сайте Microsoft, но безуспешно (http://msdn.microsoft.com/en-us/library/microsoft.practices.unity.injectionfactory%28v=pandp.51%29.aspx)
Какой наилучшей практике я должен следовать в этом случае? Я не хочу переусердствовать, какое самое простое рабочее решение?