问题标签 [hangfire.ninject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2457 浏览

c# - Hangfire 配置和 Ninject 配置

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

添加 Ninject 后,我​​使用了NinjectWebCommonnuget 包,因为它配置简单。所以现在 Ninject 是通过NinjectWebCommon创建标准内核并添加绑定的类来配置的。

此外,我创建了一些在创建内核时加载的自定义模块

Ninject Web Common 通过WebActivatorEx类注册

现在的问题与如何让 Hangfire 看到 Ninject 配置有关。通过查看Hangfire.Ninject我可以阅读的包裹

该包提供了 IGlobalConfiguration 接口的扩展方法:

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

现在我的问题是:

  • 由于IGlobalConfiguration界面的关系,我应该在 OWIN 启动方法中添加 Hangfire Ninject 配置(已经放置了 Hangfire 配置)。我应该如何获得当前的 Ninject 内核(NinjectWebCommon 配置的内核?
  • 执行顺序呢?是在WebActivatorExOWIN 启动之前还是之后执行?
  • 如果我尝试执行两次配置会发生什么?

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

0 投票
1 回答
4437 浏览

asp.net-web-api2 - 带有 Hangfire 抛出异常 DependencyResolutionException 的 Autofac 作业激活器

我的项目结构是一样的:

https://github.com/MarlabsInc/webapi-angularjs-spa

我已按照以下说明进行操作:

http://docs.hangfire.io/en/latest/background-methods/using-ioc-containers.html

所以我创建了一个容器作业激活器。

在我的 Bootstrapper.cs

我的启动类有一个方法:

在控制器中:我正在尝试将 2000 张发票的状态更新为“已批准”所以该方法很简单,如下所示:

现在当我在 SQL 中查询时:

我在数据列中得到以下异常:

{"FailedAt":"2015-07-07T10:00:40.9454943Z","ExceptionType":"Autofac.Core.DependencyResolutionException","ExceptionMessage":"没有标签匹配 'AutofacWebRequest' 的范围在范围内可见请求了哪个实例。这通常表明一个注册为 per-HTTP 请求的组件正在被 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,从不来自容器本身。","ExceptionDetails":"Autofac.Core.DependencyResolutionException: 从请求实例的范围中看不到带有匹配 'AutofacWebRequest' 的标记的范围。这通常表明注册为 per-HTTP 请求的组件正在由 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身.\r\n 在 Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)\r\n 在 Autofac.Core.Resolving.InstanceLookup..ctor(IComponentRegistration 注册,IResolveOperation 上下文,ISharingLifetimeScope mostNestedVisibleScope,IEnumerableCurrent 或 ILifetimeScopeProvider.RequestLifetime,从不来自容器本身。\r\n Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)\r\n Autofac.Core.Resolving.InstanceLookup..ctor(IComponentRegistration registration, IResolveOperation上下文, ISharingLifetimeScope mostNestedVisibleScope, IEnumerableCurrent 或 ILifetimeScopeProvider.RequestLifetime,从不来自容器本身。\r\n Autofac.Core.Lifetime.MatchingScopeLifetime.FindScope(ISharingLifetimeScope mostNestedVisibleScope)\r\n Autofac.Core.Resolving.InstanceLookup..ctor(IComponentRegistration registration, IResolveOperation上下文, ISharingLifetimeScope mostNestedVisibleScope, IEnumerable1 parameters)\r\n at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable1 个参数)\r\n 在 Autofac.Core.Resolving.ResolveOperation.ResolveComponent(IComponentRegistration 注册,IEnumerable 1 parameters)\r\n at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable1 个参数)\r\n 在 Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration 注册,IEnumerable 1 parameters)\r\n at Autofac.Core.Container.ResolveComponent(IComponentRegistration registration, IEnumerable1 个参数)\r\ n at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable 1 parameters, Object& instance)\r\n at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable1 parameters)\r\n at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)\r\n at Autofac.ResolutionExtensions.Resolve (IComponentContext 上下文,键入 serviceType)\r\n 在 Hangfire.AutofacJobActivator.ActivateJob(键入 jobType)\r\n 在 Hangfire.Common.Job.Activate(JobActivator activator)"}

有人可以帮我理解我做错了什么吗?

0 投票
0 回答
1199 浏览

asp.net-web-api2 - Webapp 和窗口服务中的 Hangfire 配置

我已经在基于 webapi 的项目中配置了 hangfire 来启动后台作业。我已经完成了下面提到的 hangfire 配置

Hangfire 的 Webapi 项目配置

现在我想使用窗口服务处理后台作业(将从 webapi 项目启动)。我根据下面提到的代码创建了窗口服务,但服务无法获取作业。仪表板显示作业始终在 eneque 中。是否需要我缺少任何特殊配置

0 投票
1 回答
736 浏览

dependency-injection - 使用 InRequestScope 与 Ninject 进行 Hangfire

我已将 Hangfire.Ninject 包安装到 ASP MVC 5 应用程序中,以便我可以运行一些后台作业。

我已经阅读了文档,但我对如何实现它感到困惑。

我现有的配置对我的 IUnitOfwork 类使用 InRequestScope,以确保每个 HTTP 请求仅实例化一个实例,如下所示:

要按照文档使用 ninject 和 hangfire,我在 ninjectwebcommon.cs 类中更新了配置,如下所示:

但现在我收到以下错误:

我有一个类我想用hangfire来处理我的后台作业,如下所示:

有人知道我在做什么错吗?该文档还指出:

这是什么意思?我仍然想确保每个 http 请求只使用一个实现 dbContext 的 IUnitOfwork 类。如果我删除 InRequestScope,这将如何影响应用程序的其余部分?

0 投票
1 回答
300 浏览

dependency-injection - 将 Hangfire 与 Ninject 配置 InRequestScope 集成时出现问题

我正在将 Hangfire 集成到应用程序(MVC5 4.6)中,以便安排通常由管理员用户每天晚上触发的日常同步任务。

问题是,我似乎无法让 Hangfire 与我当前的 Ninject 设置配合得很好。它不只是运行一个函数本身,我需要安装 Hangfire.Ninject 包并在 Startup.cs 中注册内核。

问题是,我有包含依赖项 B 的依赖项 A,但依赖项 B 也包含依赖项 A(循环)。

由于这些是在 Ninject 内核设置中声明的 inRequestScope ,这并没有引起任何问题,但是这个特定的项目在整个应用程序中被大量使用,尝试删除循环依赖会非常痛苦,但出于某种原因Hangfire 不会接受它。

有没有其他方法可以消除周期性依赖?

0 投票
1 回答
523 浏览

asp.net-core - 如何在 asp.net core 2.0 中播种 Hangfire 数据库

我正在尝试将“Hangfire”集成到我现有的 ASP.NET Core 应用程序中。查看文档,如果我们想使用 SQL Server 存储选项,似乎需要创建 Hangfire db。但是每次我们启动一个新服务器时创建一个数据库真的很烦人。

有没有一种方法可以在启用 SQL 存储选项的情况下为 DB 播种,而不是像这样从启动类中播种?

0 投票
1 回答
409 浏览

c# - 错误激活 int 没有匹配的绑定是 av

我正在尝试使用 Hangfire 在我的 MVC 项目中运行后台作业。

Enqueue我在控制器的构造函数中调用该方法:

_Uow.CostRepository属性返回一个接口:

但是由于以下原因,该作业在hangfire中失败:

错误激活 int 没有匹配的绑定是 av...</p>

我发现如果我更改代码以便在实现ICostRepository而不是通过接口调用作业,它可以工作:

即在我的控制器中:

在我的工作单元中:

这里发生了什么?有没有办法让我将我的实现放在我的存储库而不是我的工作单元中?

编辑:我在 HangFire.State 表中找到了完整的错误消息完整的错误是:

激活 int 时出错 没有匹配的绑定可用,并且类型不是自绑定的。激活路径: 2) 将依赖 int 注入到 CostRepository 类型的构造函数的参数 currentOrganisationID 1) 请求 CostRepository 建议: 1) 确保您已为 int 定义绑定。2) 如果绑定是在模块中定义的,请确保该模块已加载到内核中。3) 确保您没有意外创建多个内核。4) 如果您使用构造函数参数,请确保参数名称与构造函数参数名称匹配。5) 如果您使用自动模块加载,请确保搜索路径和过滤器正确。

所以问题是CurrentOrganisationID依赖CostRepository的。当前CurrentOrganisationID是从工作单元上的和设置中检索的HttpContext,它会将其传递给存储库的构造函数,如我上面的代码所示。

0 投票
1 回答
376 浏览

asp.net-mvc-5 - 未定义无参数构造函数 Hangfire Ninject

我在激活没有定义无参数构造函数的类的实例时遇到问题。

构造函数:

我如何注册和配置 Hangfire(使用三个点而不是敏感信息):

在 IoC 容器中注册:

错误:

对我来说,Hangfire 似乎不使用 Ninject 激活器(?),但我不知道为什么。

我遵循了这两个教程:在 Hangfire 网站和 Hangfire.Ninject github 以及几个 github 存储库和 SO 问题上。

安装 Hangfire 未使用的其他类效果很好;使用无参数构造函数来初始化 Hangfire 执行器也可以正常工作。

我在用着:

  • ASP .NET MVC 5
  • .NET 框架 4.6.1,
  • 吊火 1.6.21
  • Hangfire.Ninject 1.2