asp.net-core – 使用.net核心进行Hangfire依赖注入
如何在Hangfire中使用.net core的默认依赖注入?
我是Hangfire的新手,正在寻找一个与asp.net核心兼容的例子。 解决方法
请参阅GitHub
https://github.com/gonzigonz/HangfireCore-Example上的完整示例。
现场网站于 http://hangfirecore.azurewebsites.net/ >确保您拥有Hangfire的核心版本: public class HangfireActivator : Hangfire.JobActivator { private readonly IServiceProvider _serviceProvider; public HangfireActivator(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public override object ActivateJob(Type type) { return _serviceProvider.GetService(type); } } >接下来将Startfire注册为Startup.ConfigureServices方法中的服务: services.AddHangfire(opt => opt.UseSqlServerStorage("Your Hangfire Connection string")); >在Startup.Configure方法中配置hangfire。与您的问题相关,关键是配置hangfire以使用我们上面定义的新HangfireActivator。为此,您必须使用IServiceProvider提供hangfire,这可以通过将其添加到Configure方法的参数列表来实现。在运行时,DI将为您提供此服务: public void Configure( IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerFactory,IServiceProvider serviceProvider) { ... // Configure hangfire to use the new JobActivator we defined. GlobalConfiguration.Configuration .UseActivator(new HangfireActivator(serviceProvider)); // The rest of the hangfire config as usual. app.UseHangfireServer(); app.UseHangfireDashboard(); } >当您将作业排队时,请使用通常是您的界面的注册类型。除非您以这种方式注册,否则请勿使用具体类型。您必须使用在您的IoC其他Hangfire中注册的类型才能找到它。 services.AddScoped<DbManager>(); services.AddScoped<IMyService,MyService>(); 然后,您可以使用该类的实例化版本将DbManager排入队列: BackgroundJob.Enqueue(() => dbManager.DoSomething()); 但是你不能对MyService做同样的事情。使用实例化版本进行排队将失败,因为DI将失败,因为只有接口已注册。在这种情况下,你会像这样排队: BackgroundJob.Enqueue<IMyService>( ms => ms.DoSomething()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – TDD工作单元模式Moq无法实例化类错误的代理
- Block内的ASP.NET服务器端注释
- asp.net – 使用Groups进行分页的SignalR
- 在Docker上部署自动更新ssl证书的nginx + .NET Core
- [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类
- asp.net-mvc – ASP.NET MVC ActionLink外部区域
- asp.net-mvc-4 – 尝试从Visual Studio 2012项目目录运行站
- 为什么开发人员在实现版本控制时如此珍贵地发布API?
- asp.net – 在button和asp之间的区别:button onclick
- asp.net-mvc – Asp.net MVC 3验证在TryUpdateModel中排除了