В нашем приложении MVC мы преимущественно используем Ninject для ввода зависимостей в контроллеры. Таким образом, наша продолжительность жизни по умолчанию - InRequestScope(). Теперь мы добавили IHttpModule, который использует общие зависимости в качестве контроллеров (т. Е. UserService). Проблема в том, что HttpModules можно объединить с помощью ASP.NET и IIS и повторно использовать несколько запросов. Поскольку вложенные зависимости установлены в InRequestScope, последующие запросы часто получают ObjectDisposedException при ссылке на вложенные зависимости внутри HttpModule. Как я могу указать InRequestScope() для UserService при введении в контроллер и InScope() при введении в HttpModule.С Ninject, как вы определяете разные сроки жизни в зависимости от привязки?
Вот упрощенная версия нашей регистрации:
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start(){
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop(){
bootstrapper.ShutDown();
}
private static IKernel CreateKernel(){
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
kernel.Bind<IHttpModule>().To<CustomModule>(); // needs a UserService
kernel.Bind<IUserService>().To<UserService>().InRequestScope(); // injected into controllers and the CustomModule
DependencyResolver.SetResolver(new Services.NinjectDependencyResolver(kernel));
return kernel;
}
}
это может быть частично интересно: http://stackoverflow.com/questions/25167439/ninject-conditional-self-bind-to-change- scope-for-task-scheduler-not-working-p/25174916 # 25174916 – BatteryBackupUnit