【发布时间】:2019-09-22 19:24:28
【问题描述】:
当我可以在我的控制器中注入抽象类的 2 个不同实现时,我想在我的 .net 核心应用程序中构建一个 MVC 场景。这些实现调用它们的外部相关 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
}
}
因此,不知何故,我需要在我的容器中注册我的抽象类的两个实现。我怎样才能做到这一点?如果您发现我的架构中存在缺陷,请告诉我!
【问题讨论】:
标签: c# api asp.net-core model-view-controller dependency-injection