Autofac Регистрация Бетон Класс - PullRequest
0 голосов
/ 22 января 2019

Я получаю приведенную ниже ошибку при регистрации конкретного класса с помощью Autofac

Это класс

[AutomaticRetry(Attempts = 0)]
public class NoRetryJob<T> where T : IRecurringJob
{
    private T Job { get; set; }
    private static readonly Logger logger = LogManager.GetCurrentClassLogger();

    public NoRetryJob(T job)
    {
        Job = job;
        Job.Error += LogError;
        Job.Info += LogInfo;
    }
}

Так я делаю регистрацию с помощью автофака

 builder.RegisterGeneric(typeof(NoRetryJob<>)).InstancePerDependency();

 builder.RegisterType<CachingService>().As<ICachingService>();

Называя вышеуказанный класс как

JobRegistration.Add<NoRetryJob<PageCachingJob>>(nameof(PageCachingJob), j => j.Run(), Cron.Daily(1));     

Класс PageCachingJob -

 public class PageCachingJob : BaseJob, IRecurringJob
{
    private readonly ICachingService _cachingService;
    public DateTime? LastSuccessfulExecutionOn { get; set; }

    public PageCachingJob(ICachingService cachingService) : base()
    {
        _cachingService = cachingService;
    }

    protected override void RunJob()
    {
        _cachingService.ClearRedisCache();
    }
}


 public class JobRegistration
{
    public static void Add<T>(string jobName, Expression<Action<T>> methodCall, string cron)
    {
        RecurringJob.AddOrUpdate(jobName, methodCall, cron, TimeZoneInfo.Local);
    }
}

Класс BaseJob

 public abstract class BaseJob
{
    private static readonly Logger logger = LogManager.GetCurrentClassLogger();

    public event EventHandler<string> Info;
    public event EventHandler<string> Error;

    protected BaseJob()
    {

    }

    protected abstract void RunJob();

    public virtual JobResponse Run()
    {
        var stopwatch = new Stopwatch();
        var response = new JobResponse();
        try
        {
            logger.Info($"Job {this.GetType().Name} - started.");
            stopwatch.Start();

            RunJob();

            stopwatch.Stop();
            logger.Info($"Job {this.GetType().Name} - successful.");
        }
        catch (Exception ex)
        {
            response.Success = false;
            response.LogMessages.Add("Exception" + ex.Message);
            response.LogMessages.Add("Stacktrace : " + ex.StackTrace);
            logger.Error($"Job {this.GetType().Name} - failure." + ex);
            LogError(response.LogMessages, $"Job {this.GetType().Name} - failure.", ex);
        }

        logger.Info($"Job {this.GetType().Name} - duration: {stopwatch.Elapsed:g}.");
        return response;
    }

    private void LogError(IList<string> messages, string message, Exception ex)
    {
        messages.Add(DateTime.Now + ": ERROR " + message);
        Error?.Invoke(this, message + " " + ex.Message);
    }
}

Интерфейс -

 public interface IRecurringJob
{
    event EventHandler<string> Info;
    event EventHandler<string> Error;

    DateTime? LastSuccessfulExecutionOn { get; set; }

    JobResponse Run();
}

Интерфейс ICachingService

 public interface ICachingService
{
    bool ClearRedisCache();
}

Класс CachingService

 public class CachingService : ICachingService
{
    public CachingService()
    {
    }

    public bool ClearRedisCache()
    {
        return true;
    }
}

Получение приведенного ниже исключения

Ни один из конструкторов не найден с типом Autofac.Core.Activators.Reflection.DefaultConstructorFinder для типа 'PacDig.Atlantic.Schedule.Jobs.NoRetryJob`1 [PacDig.Atlantic.Schedule.Jobs.PageCachingJob] можно вызвать с помощью доступных служб и параметров: невозможно разрешить параметр 'PacDig.Atlantic.Schedule.Jobs.PageCachingJob job' конструктора 'Пустота .ctor (PacDig.Atlantic.Schedule.Jobs.PageCachingJob).

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...