Мне нужно для разъединенной архитектуры вызывать другую службу, используя один и тот же запрос dto.
Например.
// A value type has a callback url that will validate the request
public class ValueType {
public string Id {get;set;}
public string CallbackUrl {get;set;}
}
// The request dto to validate a value
public class ValidateRequest : IReturn<ValidateResponse>{
public string ValueTypeId {get;set;}
public string Value {get;set;}
}
// The validation response
public class ValidateResponse {
public bool IsValid {get;set;}
}
Я хочу иметь возможность обрабатывать их несколькимиservices:
public class Service1 : Service {
public object Get(ValidateRequest input){
return new ValidateResponse(input.Value === "ABC")
}
}
public class Service2 : Service {
public object Get(ValidateRequest input){
return new ValidateResponse(input.Value === "DEF")
}
}
Проверочные вызовы будут отправляться в другой службе:
public class AnotherService : Service{
public object Post(ARequest input){
var valueType = _valueTypeRepo.Get(input.type);
var callbackUrl = valueType.callbackUrl;
// callbackUrl = '/api/service1/validate' or '/api/service2/validate'
// Here, I want to call either Service1 or Service2 based on runtime condition
var jsonClient= new JsonClient(callbackUrl);
jsonClient.Get(new ValidateRequest())...
}
}
Как я могу зарегистрировать несколько маршрутов, чтобы справиться с этим?
![Example of architecture](https://i.stack.imgur.com/feAH5.jpg)
Здесь InvoiceService «знает» о CustomerService.Но CustomerService не имеет зависимости от «InvoiceService».Это то, что я имею в виду под отделенной архитектурой.Несколько служб могут добавлять настраиваемые поля (или даже пользователи могут добавлять настраиваемые поля с URL-адресом проверки, являющимся полностью внешним API), при этом «CustomerService» не должен зависеть от них.