У меня есть приложение MVC 5, которое использует Ninject, и я добавляю к нему Hangfire.
Когда я добавил Ninject, я использовал пакет NinjectWebCommon
nuget из-за его простоты в конфигурации. Итак, теперь Ninject настроен через класс NinjectWebCommon
, который создает стандартное ядро и добавляет привязки.
Кроме того, я создал некоторый пользовательский модуль, который я загружаю при создании ядра
private static IKernel CreateKernel() {
var kernel = new StandardKernel( new MyCustomModule() );
try {
kernel.Bind<Func<IKernel>>().ToMethod( ctx => () => new Bootstrapper().Kernel );
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices( kernel );
return kernel;
}
catch {
kernel.Dispose();
throw;
}
}
Ninject Web Common зарегистрирован в классе WebActivatorEx
[assembly: WebActivatorEx.PreApplicationStartMethod( typeof( MyProject.Web.NinjectWebCommon ), "Start" )]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute( typeof( MyProject.Web.NinjectWebCommon ), "Stop" )]
Теперь проблема связана с тем, как заставить Hangfire видеть конфигурацию Ninject. Посмотрев пакет Hangfire.Ninject
, я могу прочитать
В пакете предусмотрен метод расширения для IGlobalConfiguration Интерфейс:
var kernel = new StandardKernel();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
Теперь мой вопрос:
- Из-за интерфейса
IGlobalConfiguration
я должен добавить конфигурацию Hangfire Ninject внутри метода запуска OWIN (где уже установлена конфигурация Hangfire). Как получить текущее ядро Ninject (то, которое настроил NinjectWebCommon?) - Как насчет порядка исполнения? Выполняется ли
WebActivatorEx
до или после запуска OWIN? - Что произойдет, если я попытаюсь выполнить конфигурацию дважды?
В общем, как я могу поделиться конфигурацией Ninject между двумя?