【发布时间】:2015-06-16 00:21:10
【问题描述】:
我有一个使用 Ninject 的 MVC 5 应用程序,我正在向它添加 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接口,我应该在OWIN启动方法中添加Hangfire Ninject配置(Hangfire配置已经放置)。我应该如何获取当前的 Ninject Kernel(NinjectWebCommon 配置的那个? - 执行顺序呢?
WebActivatorEx是在OWIN启动之前还是之后执行? - 如果我尝试执行配置两次会怎样?
更一般地说,如何在两者之间共享 Ninject 配置?
【问题讨论】:
标签: c# asp.net-mvc-5 ninject hangfire hangfire.ninject