Как правило, даже каждый базовый контейнер IoC так или иначе поддерживает управление жизненным циклом объекта.
Мой любимый контейнер - Ninject 2.0 , который, похоже, плохо интегрируется с ASP.NET MVC 3. Он доступен в виде пакета NuGet под названием Ninject.MVC3
.
.
В методе RegisterServices(IKernel)
вы можете определить область действия для каждого типа для разрешения. Следующий код настраивает Ninject для возврата одного и того же экземпляра SomeImplementation
при разрешении ISomeInterface
:
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ISomeInterface>().To<SomeImplementation>().InRequestScope();
}
Ninject позволяет выбрать одну из следующих доступных областей:
InRequestScope()
InThreadScope()
InSingletonScope()
InTransientScope()
Нейт Кохари написал сообщение в блоге на эту тему под названием Управление жизненным циклом кэша и сбора данных в Ninject 2.0 - вы определенно захотите это проверить!