gpt4 book ai didi

c#-4.0 - HttpClient 包装器与 Autofac for Web API

转载 作者:行者123 更新时间:2023-12-04 17:00:17 24 4
gpt4 key购买 nike

我继承了一个 stub 项目,它是一个特定于我们维护的 API 端点的 HttpClient 包装器。
目的是将此解决方案作为 nuget 分发给需要使用 API 端点的其他 .NET 团队。

将 Autofac 接线作为下面的模块查看 - 我的问题是消费者会这样做:

var client = PlayersAPIHttpClientModule("http:/api.players.com");

此设置如何帮助消费者传递基本 URI,然后访问 GetPlayerInformation 方法?
using Autofac;
using AutoMapper;
using Alpha.Domain.Players;
using System.Net.Http;

namespace Alpha.Clients.Players
{
public class PlayersAPIHttpClientModule : Module
{
private readonly string _serviceBaseUrl;

public PlayersAPIHttpClientModule(string serviceBaseUrl)
{
this._serviceBaseUrl = serviceBaseUrl;
}

protected override void Load(ContainerBuilder builder)
{
base.Load(builder);

builder.Register(ctx =>
{
var serviceClient = new HttpClient
{
BaseAddress =
new System.Uri(this._serviceBaseUrl)
};

return new
PlayerDomainManager(serviceClient,
ctx.Resolve<IMappingEngine>());
})
.SingleInstance()
.As<IPlayerDomainManager>();
}
}
}

这是与核心域共享的接口(interface)。
public interface IPlayerDomainManager
{
IPlayer GetPlayerInformation (string playerId);
}

这是具有公开方法功能的类本身。
internal class PlayerDomainManager : IPlayerDomainManager
{
private readonly HttpClient _client;

private readonly IMappingEngine _mapper;

public PlayerDomainManager(HttpClient client, IMappingEngine mapper)
{
this._client = client;
this._mapper = mapper;
}

public IPlayer GetPlayerInformation(string playerId)
{
var response = this._client
.SendAsync
(new
HttpRequestMessage(HttpMethod.Get,
"/players/" + playerId),
CancellationToken.None)
.Result;
}
}

最佳答案

AutoFac Module documentation 中所述:

A module is a small class that can be used to bundle up a set of related components behind a 'facade' to simplify configuration and deployment. The module exposes a deliberate, restricted set of configuration parameters that can vary independently of the components used to implement the module.



根据文档中描述的模块的常见用例,一个常见的用例是:

Configure related services that provide a subsystem, e.g. data access with NHibernate



对于您的代码库, PlayersAPIHttpClientModule正在配置 PlayerDomainManager作为实现 IPlayerDomainManager 的服务并将其生命周期配置为单例。好处是 Module 允许 PlayerDomainManager 的深层配置要求(其依赖项之一又需要的基本服务 url)作为集中到 Modules 构造函数的配置浮出水面。如果配置更复杂,这种好处会更明显。

模块需要根据任何其他依赖项向 AutoFac 注册:
builder.RegisterModule(new PlayersAPIHttpClientModule("base_service_url));
反过来,他们配置的服务使用标准的 AutoFac 依赖解析来解析。
scope.Resolve<IDomainPlayerManager>();
因此,要回答您的问题,不,您不会根据您的问题使用 PlayersAPIHttpClientModule。
  • 注册PlayersAPIHttpClientModule使用 AutoFac ContainerBuilder
  • 使用 AutoFac Container解决IDomainPlayerManager根据需要
  • 关于c#-4.0 - HttpClient 包装器与 Autofac for Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787749/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com