【问题标题】:Issues with hangfire job activation and Autofac挂火作业激活和 Autofac 的问题
【发布时间】:2015-03-29 23:20:11
【问题描述】:

我正在尝试在我的项目中实施hangfire。当我将 RecurringJob 添加到 hangfire 时遇到问题,当它被触发时,我收到此错误:

Autofac.Core.Registration.ComponentNotRegisteredException

请求的服务 'XXXX.Services.ScheduleTasks.RepairNotificationService' 尚未 挂号的。为避免此异常,请将组件注册到 提供服务,检查服务注册使用 IsRegistered(),或使用 ResolveOptional() 方法来解决 可选依赖。

我已经安装了hangfire 和hangfire.autofac。我在 Startup.cs 中添加了 hangfire 配置,但我的 ContainerBuilder 数据在另一个文件中。我的 startup.cs 文件如下所示:

app.UseHangfire(config =>
        {
            config.UseSqlServerStorage("EmacIntranetEntities");
            config.UseServer();
            var builder = new ContainerBuilder();
            config.UseAutofacActivator(builder.Build());
        });

它不起作用。我已经检查在 var builder 和 config.UseAutofacActivator 之间粘贴所有容器构建器数据,但没有结果。我的 Autofac 配置位于从 Global.asax 调用的名为“Bootstrapper.cs”的文件中。我该如何解决这个问题? 谢谢

【问题讨论】:

    标签: c# autofac hangfire


    【解决方案1】:
    var builder = new ContainerBuilder();
    

    您有两个独立的 autofac 容器。您需要注册您希望您的工作可以访问的组件。另请注意,如果您使用任何数据库连接,您将不再处于 Web 模式,并且将无法访问 Web 请求。

    builder.RegisterModule<ServicesModule>(); 
    

    builder.RegisterType<XXXX.Services.ScheduleTasks.RepairNotificationSevice>().PropertiesAutowired().
    

    【讨论】:

    • 感谢您的建议。我没有找到任何与 autofac 共享容器对象的方法,因此我更改了 autofac 以支持简单的注入器,并更改了 startup.cs 中容器的初始化。现在一切正常。谢谢!
    • 不工作 :(... 得到错误“无法创建请求生命周期范围,因为 HttpContext 不可用”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多