У меня есть новый проект, в котором используется контейнер Windsor для IoC.Виндзор контейнер. Время жизни объектов в приложении ASP.NET MVC
Здесь упрощен код выполняется в установке
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly().BasedOn<BaseController>().LifestyleTransient(),
Component.For<ISecurityManager>().ImplementedBy<SecurityManager>(),
Component.For<IAccountManager>().ImplementedBy<AccountManager>()
........)
}
Информация, которую я нашел в официальном documenation недостаточно для понять в деталях эти строки.
Classes.FromThisAssembly().BasedOn<BaseController>().LifestyleTransient(),
Эта строка в методе регистра позволяет инъекции зависимостей для всех классов в моем приложении, которые унаследованы от BaseController.
BaseController входит в комплект.
Впрыскивание не производится в другие классы, чем описано выше.
Мы показываем контейнеру, что время жизни всех классов контроллеров будет экземпляром.
Component.For<ISecurityManager>().ImplementedBy<SecurityManager>()
Для всех контроллеров, зарегистрированных выше, если они есть в конструкторе интерфейс ISecurityManager будет введен экземпляр класса SecurityManager.
Срок службы этого SecurityManager в качестве значения по умолчанию равен Singleton. Поэтому после запуска приложения у нас будет только один экземпляр SecurityManager для всех контроллеров до конца выполнения приложения.
Являются ли мои идеи правильными? Кажется, что нет, по крайней мере потому, что LifestyleTransient() для контроллеров мне кажется странным и что введенные объекты тоже будут синглтонами.