我有一个订单管理系统,可以通过外部系统发送电子邮件。可通过http调用访问外部系统。订单管理主要有3个项目:类库,Web api2和mvc应用程序。在类库中,这是用于与电子邮件系统进行交互的服务所在的位置。我已经使用Autofac连接了所有依赖项。我正在考虑在Web api项目中创建httpclient,以便将其传递给类库。在ASP.NET核心中,它是可能的,但是我不确定如何在.net 4.8中做到这一点。
对于上下文,情况如下:用户将使用调用Web API的mvc应用下订单。 Web API仅提供类库中所有逻辑的端点。用户下订单时,应该会收到一封包含订单详细信息的电子邮件。类库调用一个外部系统来发送电子邮件。类库具有一个名为IMessagingService的接口,该接口具有一种方法SendEmailAsync。该服务MessagingService的实现是需要httpclient的实现]
IMessagingService:
public interface IMessagingService
{
Task SendEmailAsync(string email, string message);
}
消息服务:
public class MessagingService : IMessagingService
{
private readonly HttpClient _httpClient;
public MessagingService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task SendEmailAsync(string email, string message)
{
await _httpClient.PostAsJsonAsync(/*content*/);
}
}
Web API Global.asax.cs:
public class WebApiApplication : System.Web.HttpApplication
{
internal static HttpClient _httpClient;
protected void Application_Start()
{
//Removed other lines
Uri baseUri = new Uri("");
_httpClient = new HttpClient
{
BaseAddress = baseUri
};
_httpClient.DefaultRequestHeaders.ConnectionClose = false;
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
ServicePointManager.FindServicePoint(baseUri).ConnectionLeaseTimeout = 60 * 1000;
}
}
Autofac配置:
builder.RegisterType<MessagingService>()
.WithParameter("httpClient", WebApiApplication._httpClient)
.As<IMessagingService>()
.InstancePerRequest();
是否可以通过Autofac将Global.asax.cs中创建的httpclient传递给类库?有什么建议吗?
N.B。目前,我无法迁移到ASP.NET Core。
看来是在Application_Start执行之前进行了注册。 Application_Start创建新的引用,但是Autofac存储旧的(空)。您应该重新组织代码。