Я хочу встроить в мое основное приложение .net сценарий MVC, когда я могу внедрить в свой контроллер 2 различные реализации абстрактного класса.Эти реализации вызывают свой внешний относительный API.Может быть, архитектура неправильная, и поэтому я прошу вас предложения, но сначала следуйте за мной в моих мыслях, пожалуйста.Я создаю общий абстрактный класс.Почему абстрактно?Потому что основной способ / свойства для вызова API одинаков для всех.В моем случае пока у меня есть только HttpClient.
public abstract class ApiCaller
{
protected static HttpClient client;
protected static string ApiUrl;
public ApiCaller(string apiUrl)
{
client = new HttpClient();
ApiUrl = apiUrl;
}
public abstract string GetApiResultAsync();
}
После этого у меня будут два разных класса Api1Service и Api2Service , которые расширяют ApiCaller и будут иметь свои собственные различные способы вызова своих относительных API.
public class Api1Service : ApiCaller
{
public Api1Service(string apiUrl) : base(apiUrl)
{
}
public override string GetApiResultAsync()
{
...
}
}
public class Api2Service : ApiCaller
{
public Api2Service(string apiUrl) : base(apiUrl)
{
}
public override string GetApiResultAsync()
{
...
}
}
Теперь в моем контроллере я хочу ввести оба значения, так как я хочу использовать оба бизнес-сервиса ... но я незнаю, возможно ли это.
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
private readonly ApiCaller _apiCaller;
public BooksAndAlbumsController(ApiCaller apiCaller)
{
_apiCaller = apiCaller;
}
[HttpPost]
public void Post([FromBody] string value)
{
_apiCaller.GetApiResultAsync() //but I want to use both my apiCallers
}
}
Итак, каким-то образом в моем контейнере мне нужно было бы зарегистрировать обе реализации моего абстрактного класса.Как мне этого добиться?Если вы видите недостатки в моей архитектуре, пожалуйста, дайте мне знать!