【问题标题】:Hangfire configuration and Ninject configurationHangfire 配置和 Ninject 配置
【发布时间】: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


    【解决方案1】:

    我应该如何获得当前的 Ninject Kernel

    查看Ninject.Web.Common.Bootstrapper 的代码表明它存储了内核的单个静态实例,并通过Kernel 属性公开它。这意味着您可以在 OWIN 启动方法中执行此操作:

    GlobalConfiguration.Configuration.UseNinjectActivator(
                                         new Ninject.Web.Common.Bootstrapper().Kernel);
    

    您将拥有相同的 IKernel 实例,以及您在 NinjectWebCommon.RegisterServices 中配置的任何绑定

    执行顺序呢? WebActivatorEx 是在 OWIN 启动之前还是之后执行的?

    以前。您可以通过在每个中设置断点来验证这一点(就像我所做的那样)。 More info

    更一般地说,如何在两者之间共享 Ninject 配置?

    如果我尝试执行两次配置会怎样?

    内核配置是“组合​​根”。根据该主题的杰出专家 Mark Seemann 的说法,should only be one of these in the applicationit should be as close as possible to the application's entry point.

    【讨论】:

    • 编辑:用更好的基于引导程序的建议替换了自定义属性建议,并添加了一些组合根。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多