gpt4 book ai didi

c# - 服务器上的 HangFire 重复作业失败,并出现 Autofac.Core.Registration.ComponentNotRegisteredException 或无参数异常

转载 作者:行者123 更新时间:2023-12-03 09:15:07 24 4
gpt4 key购买 nike

我刚刚开始使用 HangFire。当我从 IIS Express 本地运行它时,这些作业似乎工作正常,但是当我在我的开发服务器上运行它时,我收到没有定义无参数构造函数的错误。我之前使用的是 Simple Injector,但现在我已转向 Autofac。

 public class Startup
{

public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
ConfigureIoc(app);
ConfigureRoutes();
ConfigureHangfire(app);
ScheduleXeroMonitor();
}

public void ConfigureHangfire(IAppBuilder app)
{
var authList = new List<IDashboardAuthorizationFilter>
{
new ClaimsBasedAuthorizationFilter("role", "admin")
};
var options = new DashboardOptions
{
Authorization = authList,
AppPath = "/Manage"

};

app.UseHangfireDashboard("/hangfire", options);
app.UseHangfireServer();
}

public void ConfigureRoutes()
{
BundleTable.EnableOptimizations = true;
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}

public void ConfigureIoc(IAppBuilder app)
{
var builder = DependencyRegistrar.RegisterClasses();
var container = builder.Build();
app.UseAutofacMiddleware(container);
app.UseAutofacMvc();
GlobalConfiguration.Configuration.UseAutofacActivator(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}

public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Login"),
CookieSecure = CookieSecureOption.SameAsRequest,
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
AuthenticationMode = AuthenticationMode.Passive
});


AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
}

public void ScheduleXeroMonitor()
{
var backGroundWorker = DependencyResolver.Current.GetService<IXeroBackGroundWorker>();
RecurringJob.AddOrUpdate("XeroPolling", () => backGroundWorker.PollJobs(), Cron.Minutely); //change the Cron to every 5 minutes

var emailWorker = DependencyResolver.Current.GetService<IEmailService>();
RecurringJob.AddOrUpdate("EmailPolling", () => emailWorker.SendQueuedEmails(), Cron.Minutely);//"*/10 * * * *"
}
}

这是我注册依赖项的代码。

public class DependencyRegistrar
{
public static ContainerBuilder RegisterClasses()
{
var builder = new ContainerBuilder();
builder.RegisterType<XeroSyncRestClient>().As<IXeroSyncRestClient>().InstancePerLifetimeScope();
builder.RegisterType<XeroBackGroundWorker>().As<IXeroBackGroundWorker>().InstancePerLifetimeScope();
builder.RegisterType<EmailService>().As<IEmailService>().InstancePerLifetimeScope();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
return builder;
}

}

有人可以告诉我我做错了什么吗?我还在 Hangfire 讨论论坛上发布了此内容

最佳答案

既然您已经在 GlobalConfiguration.Configuration.UseAutofacActivator(container); 中添加了 AutoFac,您只需简单地让hangfire 和 Autofac 为您解决依赖关系即可。

public void ScheduleXeroMonitor()
{
//var backGroundWorker = DependencyResolver.Current.GetService<IXeroBackGroundWorker>(); --> let hangfire and autofac do this for you
RecurringJob.AddOrUpdate<IXeroBackGroundWorker>("XeroPolling", backGroundWorker => backGroundWorker.PollJobs(), Cron.Minutely); //change the Cron to every 5 minutes

//var emailWorker = DependencyResolver.Current.GetService<IEmailService>();--> let hangfire and autofac do this for you
RecurringJob.AddOrUpdate<IEmailService>("EmailPolling", emailWorker => emailWorker.SendQueuedEmails(), Cron.Minutely);//"*/10 * * * *"
}

关于c# - 服务器上的 HangFire 重复作业失败,并出现 Autofac.Core.Registration.ComponentNotRegisteredException 或无参数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516489/

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