Hangfire 依赖注入
Hangfire Dependency Injection
在我的项目中,后台作业有问题。我正在使用 Hangfire 和默认的 .Net Core 依赖注入。
Startup.cs
配置服务:
services.AddTransient<IAuthorizable, AuthorizeService>();
services.AddTransient<IEditable, ConfigureService>();
services.AddTransient<IRequested, RequestService>();
services.AddTransient<INotified, NotificationService>();
services.AddHangfire(x => x.UseSqlServerStorage("ConnectionString"));
配置:
app.UseHangfireDashboard();
app.UseHangfireServer();
当我的作业尝试 运行 时,我收到此错误:
System.InvalidOperationException: No service for type
'Mapper.Services.RequestService' has been registered.
我做错了什么?
DI 通过提供 RequestService
知道如何处理 IRequested
。但那是为了 类 要求 IRequested
。它不知道如何处理直接请求 RequestService
的 类。
因此,根据错误消息,您还需要注册 RequestService
服务。
services.AddTransient<IAuthorizable, AuthorizeService>();
services.AddTransient<IEditable, ConfigureService>();
services.AddTransient<IRequested, RequestService>();
services.AddTransient<RequestService, RequestService>(); //<--
services.AddTransient<INotified, NotificationService>();
services.AddHangfire(x => x.UseSqlServerStorage("ConnectionString"));
根据评论更新。
如果确实如此,您还应该考虑将作业更新为依赖于 IRequested
抽象而不是已实现的 RequestService
。
在我的项目中,后台作业有问题。我正在使用 Hangfire 和默认的 .Net Core 依赖注入。
Startup.cs
配置服务:
services.AddTransient<IAuthorizable, AuthorizeService>();
services.AddTransient<IEditable, ConfigureService>();
services.AddTransient<IRequested, RequestService>();
services.AddTransient<INotified, NotificationService>();
services.AddHangfire(x => x.UseSqlServerStorage("ConnectionString"));
配置:
app.UseHangfireDashboard();
app.UseHangfireServer();
当我的作业尝试 运行 时,我收到此错误:
System.InvalidOperationException: No service for type 'Mapper.Services.RequestService' has been registered.
我做错了什么?
DI 通过提供 RequestService
知道如何处理 IRequested
。但那是为了 类 要求 IRequested
。它不知道如何处理直接请求 RequestService
的 类。
因此,根据错误消息,您还需要注册 RequestService
服务。
services.AddTransient<IAuthorizable, AuthorizeService>();
services.AddTransient<IEditable, ConfigureService>();
services.AddTransient<IRequested, RequestService>();
services.AddTransient<RequestService, RequestService>(); //<--
services.AddTransient<INotified, NotificationService>();
services.AddHangfire(x => x.UseSqlServerStorage("ConnectionString"));
根据评论更新。
如果确实如此,您还应该考虑将作业更新为依赖于 IRequested
抽象而不是已实现的 RequestService
。