W zalaczniku jest jak wyglada proces
Step jest abstrakcyjna bazowa klasa ktora ma jakies tam swoje informacje a klasy ktore z niej dziedzicza maja jeszcze kilka dodatkowych wlasciwosci
determinate which step it is
jest prostym switch casem
switch (step)
{
case HttpRequestStep httpRequestStep:
_logger.LogInformation($"Executing httpRequestStep");
isHandled = await _provider
.GetService<IStepHandler<HttpRequestStep>>()
.HandleAsync(message, httpRequestStep, profile);
break;
case WaitStep waitStep:
_logger.LogInformation($"Executing waitStep");
isHandled = await _provider
.GetService<IStepHandler<WaitStep>>()
.HandleAsync(message, waitStep, profile);
break;
case EmailStep emailStep:
_logger.LogInformation($"Executing emailStep");
isHandled = await _provider
.GetService<IStepHandler<EmailStep>>()
.HandleAsync(message, emailStep, profile);
break;
default:
throw new ArgumentOutOfRangeException(nameof(step));
}
Pomijam, ze serwisy sa pobierane w metodzie, ale tez lepiej pokazuje problem.
Ogolnie to ciagle robi wszystko to samo. Wiec myslalem jakby to zrobic by usunac tego switch case'a i miec po prostu
isHandled = await StepHandler.HandleAsync(message, step, profile)
Problemem ktory sie pojawia, to skad mialby StepHandler wiedziec ktory handler wywolac?
Myslalem zeby przy rejestracji uzyc jakos refleksji i polaczyc to jakos ze soba... ale to rozwiazanie mi sie nie usmiecha.
Wiem, ze widzialem juz kiedys na ten problem rozwiazanie, ale nie moge go znalezc ani przypomniec ani wymyslec cos
Tak kolejne Step beda dodawane, wiec nie chce za kazdym razem rozszerzac switch case ;)