我有一个订单管理系统,它通过外部系统发送电子邮件。 通过 http 调用访问外部系统。 订单管理主要有3个项目:类库、web api2、mvc app。 在与电子邮件系统交互的服务所在的类库中。 我已经使用 Autofac 连接了所有依赖项。 我正在考虑在 web api 项目中创建 httpclient,以便将其传递给类库。 在 ASP.NET 核心中它是可能的,但我不确定如何在 .net 4.8 中做到这一点。

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

即时通讯服务:

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 传递给类库? 有什么建议吗?

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

#1楼 票数:1 已采纳

如果在 Autofac _httpClient注册期间为空,那么对我来说,它看起来像是在执行Application_Start之前进行了注册。 Application_Start创建新引用,但 Autofac 存储旧引用(空)。 您应该重新组织您的代码。

  ask by Edgias translate from so

未解决问题?本站智能推荐:

1回复

在AutofacC#Resolve中,如何将参数传递给构造函数

我有一个与类的接口,该类的构造函数将Autofac IContainer作为参数。 我如何一次传递此参数来解析此类。 我尝试使用新的NamedParameter但收到错误班级 在控制台应用程序中 注册到集装箱 错误
1回复

使用AutoFac将原始值传递给ApiController的简单方法

给定以下配置Autofac的方法: 并给出以下Web-Api控制器: 将someValue传递给MyController的构造函数的最简单方法是什么? 我可以创建一个MyControllerConfig类并向AutoFac注册: 并将其添加到我的配置模块中: 并将MyApiC
1回复

httpClient.GetAsyncC#.NET4.8中的内存泄漏

使用httpClient.GetAsync时出现内存泄漏问题。 在任务管理器中,进程保持高内存消耗,不会被释放。 这是我的代码: 但是,当我改用httpClient.GetStreamAsync并更改时: 到: 几秒钟后内存确实会被释放。 但我更愿意使用GetAsync因为它为我提供了有关状态代码的
2回复

如何获得对类库项目的引用以工作?

使用以下2个文件: C# 类库项目目标框架:.NET v 5.0 C# 控制台项目 .NET Framework:4.8 运行程序 System.IO.FileNotFoundException 时出现以下错误:'无法加载文件或程序集'System.Runtime,Version=5.0.0.0
2回复

在两个打开的窗口之间传递数据

我正在做我自己的项目经理,并有一些我想到的额外选项。 我坚持项目类别(当你创建项目时,你必须选择它) 我希望它看起来像这样:当您单击 (...) 按钮时,“选择类别”窗口将打开 在“选择类别”窗口中有一些按钮。 当您单击其中之一时,它会突出显示,名为“类别”的字符串将获取按钮名称(我们单击的按钮)的
1回复

带有AutofacforWebAPI的HttpClient包装器

我继承了一个存根项目,它是一个HttpClient包装器,专门用于我们维护的API连接点。 目的是将此解决方案作为nuget分发给需要使用API​​端点的其他.NET团队。 将Autofac电线连接看作下面的模块 - 我的问题是消费者会这样做: 这个设置如何帮助消费者传递基URI然后访
1回复

HttpClient将ClaimsIdentity传递给另一个WebApi

我使用透明代理,是否可以将声明身份传递给另一个WebAPI? 我有两个WebAPI,演示文稿和应用程序,都使用ADFS进行身份验证。 到目前为止,我的代码处理了对应用程序WebAPI的表示请求
2回复

将Autofac容器传递给WPFUserControl

我正在使用autofac来解析WPF应用程序中的Views和ViewModel。 IComponentContext将自动传递到View中。 一个例子: 在此视图的XAML中,创建了具有自己的ViewModel的UserControl。 一个例子: Autofac不会创建User