gpt4 book ai didi

c# - Hangfire 配置和 Ninject 配置

转载 作者:IT王子 更新时间:2023-10-29 04:44:30 25 4
gpt4 key购买 nike

我有一个使用 Ninject 的 MVC 5 应用程序,我正在向它添加 Hangfire。

当我添加 Ninject 时,我使用了 NinjectWebCommon nuget 包,因为它的配置很简单。所以现在 Ninject 通过创建标准内核并添加绑定(bind)的 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 包,我可以阅读

The package provides an extension method for IGlobalConfiguration interface:

var kernel = new StandardKernel(); GlobalConfiguration.Configuration.UseNinjectActivator(kernel);

现在我的问题是:

  • 由于 IGlobalConfiguration 接口(interface),我应该在 OWIN 启动方法中添加 Hangfire Ninject 配置(Hangfire 配置已放置在此处)。我应该如何获取当前的 Ninject 内核(NinjectWebCommon 配置的内核?
  • 执行顺序如何? WebActivatorEx是在 OWIN 启动之前还是之后执行?
  • 如果我尝试执行两次配置会怎样?

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

最佳答案

How should I get the current Ninject Kernel

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

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

并且您将拥有相同的 IKernel 实例,包括您在 NinjectWebCommon.RegisterServices

中配置的任何绑定(bind)

What about the order of execution? Is the WebActivatorEx executing before or after the OWIN startup?

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

More generally, how can I share the Ninject configuration between the two?

What happens if I try to execute the configuration twice?

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

关于c# - Hangfire 配置和 Ninject 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30856995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com