Я создаю ASP. NET Приложение Core Rest API.
На контроллере, в зависимости от значения параметра, нам нужно создать запрос процессора { Работа процессора заключается в дальнейшая обработка запроса и выполнение бизнес-логики c}.
Теперь с. net core DI, как мы можем построить объект, когда у нас есть какое-то условие для выполнения на данных времени выполнения до идентификации системы какой тип объекта нам нужно создать / построить.
Я могу думать о ServiceLocator, но это анти-шаблон. Какой должен быть правильный подход к ее решению.
Пример кода:
Здесь у нас есть контроллер для расчета сборов, и этот расчет зависит от нескольких значений объекта запроса (Payment
)
Теперь логика вычислений c отличается для значений Payment
, но оба параметра и возвращаемые значения обеих служб (входящих / исходящих) одинаковы
public class FeeController : ControllerBase
{
public PaymentController(IPayemntService is, IPayemntService os)
{
_inwordService = is;
_outwordsService = os;
// two dependency injected but on a request only need one
}
public ActionResult<int> CalculateFees(Payment payment)
{
var retValue = 0;
// this condition will be more complex...
if (payment.Direction == PayDirection.Inwords)
{
//logic to calculate Fees and Tax for inwords operation
retValue = _inwordService.calcualte(payment, "some other values may be");
}
else
{
//logic to calculate Fees and Tax for outwords operation
retValue = _outwordsService.calcualte(payment, "some other values may be");
}
return retValue;
}
}
Через. net core DI Мы можем создать оба экземпляра службы, но для отдельного запроса потребуется только один из них.