@ Алекс Сейчас я получаю счет операций как 0, и из-за этого я получаю исключение: тип не зарегистрирован

я есть следующее заявление:

1)Приложение Mvc : Клиент Hangfire, откуда я буду ставить задания и размещать панель управления. Это приложение будет содержать ссылку на мою библиотеку классов.

2)Консольное приложение : Сервер Hangfire будет жить в этом консольном приложении.

3)Библиотека классов : Общая библиотека между сервером Hangfire (консольное приложение) и клиентом Hangfire (asp.net mvc), в котором будет находиться мой долгосрочный код. Сервер Hangfire выполнит код этой библиотеки.

У меня есть структура, как показано ниже в библиотеке классовшаблон дизайна стратегии.

Код взят из следующего:Ссылка:

Интерфейсы:

public interface IOperation
{
    Output Process(Input input);
    bool AppliesTo(Type type);
}

public interface IOperationStrategy
{
    Output Process(Type type,Input input);
}

Операции:

public class Add : IOperation
{
    public bool AppliesTo(Type type)
        {
            return typeof(Add).Equals(type);
        }

    public Output Process(Input input)
    {
        // Implementation
        return new Output();
    }
}

public class Multiply : IOperation
{
     public bool AppliesTo(Type type)
        {
            return typeof(Multiply).Equals(type);
        }

    public Output Process(Input input)
    {
        // Implementation
        return new Output();
    }
}

стратегия:

public class OperationStrategy : IOperationStrategy
{
    private readonly IOperation[] operations;

    public OperationStrategy(params IOperation[] operations)
    {
        if (operations == null)
            throw new ArgumentNullException(nameof(operations));
        this.operations = operations;
    }

    public Output Process(Type type, Input input)
    {
        var op = operations.FirstOrDefault(o => o.AppliesTo(type));
        if (op == null)
            throw new InvalidOperationException($"{operation} not registered.");

        return op.Process(input);
    }
}

использование:

// Do this with your DI container in your composition 
// root, and the instance would be created by injecting 
// it somewhere.
var strategy = new OperationStrategy(
    new Add(), // Inject any dependencies for operation here
    new Multiply()); // Inject any dependencies for operation here

// And then once it is injected, you would simply do this.
var input = new Input { Value1 = 2, Value2 = 3 };
BackgroundJob.Enqueue(() => strategy.Process(typeof(Add), input));

Но сервер Hangfire не может выбрать работу, и когда я проверяюstate tableя вижу ошибку, как показано ниже:

"FailedAt": "2018-03-21T13: 14: 46.0172303Z", "ExceptionType": "System.MissingMethodException", "ExceptionMessage": "Для этого объекта не определен конструктор без параметров.", "ExceptionDetails": "System.MissingMethodException : Для этого объекта не определен конструктор без параметров. \ R \ n в System.RuntimeTypeHandle.CreateInstance (тип RuntimeType, логическое значение publicOnly, логическое значение noCheck, логическое значение & canBeCached, RuntimeMethodHandleInternal & ctor, логическое значение & bNeedSlowEnt_ReignSecurity.NecurityCheck) publicOnly, логическое значение skipCheckThis, логическое значение fillCache, StackCrawlMark & ​​stackMark) \ r \ n в System.Activator.CreateInstance (тип Type, логический непубличный) \ r \ n в System.Activator.CreateInstance (тип тип) \ r \ n в HangfireJ. .SimpleJobActivatorScope.Resolve (Type type) \ r \ n в Hangfire.Server.CoreBackgroundJobPerformer.Perform (контекст PerformContext) \ r \ n в Hangfire.Server.BackgroundJobPerformer. <> C__DisplayClass8_0.b__er at (n) () .BackgroundJobPerformer.InvokePe rformFilter (фильтр IServerFilter, preContext PerformingContext, продолжение Func 1) \ r \ n в Hangfire.Server.BackgroundJobPerformer.PerformJobWithFilters (контекст PerformContext, фильтры IEnumerable`1) \ r \ n в контексте Hangfire.Server.BackformConform () r \ n at Hangfire.Server.Worker.PerformJob (Контекст BackgroundProcessContext, соединение IStorageConnection, String jobId) "

Я не получаю то, что должно быть настроено для этой структуры, так как у меня здесь нет контейнера IOC.

Кто-нибудь может помочь мне с этим?

Демо-проект:https://www.dropbox.com/s/bfjr58y6azgmm3w/HFDemo.zip?dl=0

Ответы на вопрос(1)

Ваш ответ на вопрос