Ho appena installato il pacchetto Hangfire nel mio sito Web MVC. Ho creato una classe di avvioNessun costruttore parametrico definito per questo oggetto - Utilità di pianificazione Hangfire
[assembly: OwinStartup(typeof(Website.Startup))]
namespace Website
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
Hangfire.ConfigureHangfire(app);
Hangfire.InitializeJobs();
}
}
}
e una classe Hangfire
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(), "* * * * *");
}
}
Inoltre, ho creato un nuovo lavoro in una libreria di classe separata
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);
}
}
}
Così, quando ho eseguire l'applicazione, nel cruscotto Hangfire ho il seguente errore:
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)
Quindi, sono un po 'perso qui. Cosa mi manca?
Avete il codice di registro in cui il segnale di blocco viene avvisato di quali classi deve essere utilizzato? – dbarnes
Penso di non averlo. Non ricordo di aver letto su questo. Mi puoi dire di più? –
Beh, non sono un esperto di fuochi d'artificio, ma è chiaro che sta cercando di risolvere il 'CurrencyRatesJob', ma non può perché non sa a cosa deve essere risolto il'IBudgetsRepository'. Questo è il motivo per cui ottieni l'errore del costruttore vuoto. Forse questo post può aiutare http://stackoverflow.com/questions/26615794/hangfire-autofac-with-mvc-app-injection-fails. – dbarnes