Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将HttpClient传递到类库_C#_Asp.net Web Api2_Autofac_.net 4.8 - Fatal编程技术网

C# 将HttpClient传递到类库

C# 将HttpClient传递到类库,c#,asp.net-web-api2,autofac,.net-4.8,C#,Asp.net Web Api2,Autofac,.net 4.8,我有一个订单管理系统,通过外部系统发送电子邮件。通过http调用访问外部系统。订单管理主要有3个项目:类库、web api2和mvc应用程序。在类库中,该类库是与电子邮件系统交互的服务所在。我已使用Autofac连接了所有依赖项。我正在考虑在WebAPI项目中创建httpclient,以便将其传递给类库。在ASP.NET内核中,这是可能的,但我不确定如何在.NET4.8中实现 对于上下文,场景如下所示: 用户将使用调用web api的mvc应用程序下订单。web api只为类库中的所有逻辑提供端

我有一个订单管理系统,通过外部系统发送电子邮件。通过http调用访问外部系统。订单管理主要有3个项目:类库、web api2和mvc应用程序。在类库中,该类库是与电子邮件系统交互的服务所在。我已使用Autofac连接了所有依赖项。我正在考虑在WebAPI项目中创建httpclient,以便将其传递给类库。在ASP.NET内核中,这是可能的,但我不确定如何在.NET4.8中实现

对于上下文,场景如下所示: 用户将使用调用web api的mvc应用程序下订单。web api只为类库中的所有逻辑提供端点。当用户下订单时,他们应该会收到一封包含订单详细信息的电子邮件。类库调用外部系统来发送电子邮件。类库有一个名为IMessagingService的接口,该接口有一个方法SendEmailAsync。此服务MessagingService的实现需要httpclient

iMessageService:

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;
    }
}
自动传真配置:

builder.RegisterType<MessagingService>()
            .WithParameter("httpClient", WebApiApplication._httpClient)
            .As<IMessagingService>()
            .InstancePerRequest();
builder.RegisterType()
.WithParameter(“httpClient”,WebApiApplication.\u httpClient)
.As()
.InstancePerRequest();
是否可以通过Autofac将在Global.asax.cs中创建的httpclient传递到类库?有什么建议吗


注意:目前我无法迁移到ASP.NET core。

如果在Autofac
\u httpClient
中注册时为空,那么对我来说,注册似乎是在执行
应用程序启动之前进行的<代码>应用程序启动
创建新引用,但Autofac存储旧引用(空)。你应该重新组织你的代码。

嗯,我认为这是可能的,我以前也遇到过类似的问题,我使用了NInject。我不确定是否理解。提供的Autofac代码似乎符合您的要求。到目前为止有什么问题?@CyrilDurand问题是我的值变为空。你试过调试吗?_httpClient在注册期间是否为空?@hotel如何在注册期间检查其是否为空?