HangFire Для этого объекта не определен конструктор без параметров - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть приложение MVC5 и реализован HangFire с Autofa c. В своем автозагрузчике Autofact я использую:

  GlobalConfiguration.Configuration.UseAutofacActivator(container, false);

Я использую следующий код в файле startup.cs:

 public void Configuration(IAppBuilder app)
    {

        // Configure Hangfire
        app.UseHangfireAspNet(GetHangfireServers);

        var options = new DashboardOptions{Authorization = new[] { new HangfireAuthorizationFilter() }};
        app.UseHangfireDashboard("/hangfire", options);

    }

    private IEnumerable<IDisposable> GetHangfireServers()
    {
        GlobalConfiguration.Configuration
            .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
            .UseSimpleAssemblyNameTypeSerializer()
            .UseRecommendedSerializerSettings()
            .UseSqlServerStorage("DomainDbConnection", new SqlServerStorageOptions
            {
                CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                QueuePollInterval = TimeSpan.Zero,
                UseRecommendedIsolationLevel = true,
                UsePageLocksOnDequeue = true,
                DisableGlobalLocks = true
            });

        yield return new BackgroundJobServer();
    }

Все работает, как ожидается, и задания успешно выполняются. Мои зависимости разрешены, как и ожидалось.

Теперь я хочу настроить рабочий сервер так, чтобы он всегда запускался, поэтому я следовал: http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html. Я следил за каждым шагом и публиковался на сервере. Нет, когда я запускаю задание, поставленное в очередь, оно терпит неудачу со следующим исключением:

Failed

An exception occurred during processing of a background job.
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.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(Type type)
   at Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)
   at Hangfire.Server.BackgroundJobPerformer.<>c__DisplayClass9_0.<PerformJobWithFilters>b__0()
   at Hangfire.Server.BackgroundJobPerformer.InvokePerformFilter(IServerFilter filter, PerformingContext preContext, Func`1 continuation)
   at Hangfire.Server.BackgroundJobPerformer.PerformJobWithFilters(PerformContext context, IEnumerable`1 filters)
   at Hangfire.Server.BackgroundJobPerformer.Perform(PerformContext context)
   at Hangfire.Server.Worker.PerformJob(BackgroundProcessContext context, IStorageConnection connection, String jobId)

Я не понимаю, почему я получаю эти ошибки. У кого-нибудь есть подсказка?

...