Я только что установил пакет Hangfire на моем веб-сайте MVC. Я создал класс запускаНет конструктора без параметров для этого объекта - Планировщик Hangfire
[assembly: OwinStartup(typeof(Website.Startup))]
namespace Website
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
Hangfire.ConfigureHangfire(app);
Hangfire.InitializeJobs();
}
}
}
и класс замедленного воспламенения
public class Hangfire
{
public static void ConfigureHangfire(IAppBuilder app)
{
app.UseHangfire(config =>
{
config.UseSqlServerStorage("DefaultConnection");
config.UseServer();
config.UseAuthorizationFilters();
});
}
public static void InitializeJobs()
{
RecurringJob.AddOrUpdate<CurrencyRatesJob>(j => j.Execute(), "* * * * *");
}
}
Кроме того, я создал новую работу в отдельной библиотеке классов
public class CurrencyRatesJob
{
private readonly IBudgetsRepository budgetsRepository;
public CurrencyRatesJob(IBudgetsRepository budgetsRepository)
{
this.budgetsRepository = budgetsRepository;
}
public void Execute()
{
try
{
var budgets = new BudgetsDTO();
var user = new UserDTO();
budgets.Sum = 1;
budgets.Name = "Hangfire";
user.Email = "[email protected]";
budgetsRepository.InsertBudget(budgets, user);
}
catch (Exception ex)
{
var message = ex.ToString();
throw new NotImplementedException(message);
}
}
}
Так что, когда я запустите приложение, на приборной панели Hangfire я получаю следующую ошибку:
Failed An exception occurred during job activation.
System.MissingMethodException
No parameterless constructor defined for this object.
System.MissingMethodException: No parameterless constructor defined for this object.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Hangfire.JobActivator.ActivateJob(Type jobType)
at Hangfire.Common.Job.Activate(JobActivator activator)
Итак, я немного здесь потерялся. Что мне не хватает?
У вас есть код регистрации, где hangfire получает уведомление о том, какие классы он должен использовать? – dbarnes
Я думаю, что у меня его нет. Я не помню, чтобы прочитать об этом. Можете ли вы рассказать мне больше? –
Ну, я не эксперт по фейджу, но ясно, что он пытается разрешить «CurrencyRatesJob», но он не может, потому что он не знает, к чему должен быть разрешен «IBudgetsRepository». Вот почему вы получаете пустую ошибку конструктора. Возможно, этот пост может помочь http://stackoverflow.com/questions/26615794/hangfire-autofac-with-mvc-app-injection-fails. – dbarnes