C# 4.0 带有Autofac for Web API的HttpClient包装器
我继承了一个存根项目,它是特定于我们维护的API enpoint的HttpClient包装器。 其目的是将此解决方案作为nuget分发给需要使用API端点的其他.NET团队 将Autofac连线视为以下模块-我的问题是消费者是否会这样做:C# 4.0 带有Autofac for Web API的HttpClient包装器,c#-4.0,.net-4.5,autofac,asp.net-web-api2,dotnet-httpclient,C# 4.0,.net 4.5,Autofac,Asp.net Web Api2,Dotnet Httpclient,我继承了一个存根项目,它是特定于我们维护的API enpoint的HttpClient包装器。 其目的是将此解决方案作为nuget分发给需要使用API端点的其他.NET团队 将Autofac连线视为以下模块-我的问题是消费者是否会这样做: var client = PlayersAPIHttpClientModule("http:/api.players.com"); 此设置如何帮助使用者传递基本URI,然后访问GetPlayerInformation方法 using Autofac; usi
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>();
}
}
}
这就是具有公开方法功能的类本身
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;
}
}
如以下文件所述:
模块是一个小型类,可用于捆绑一组
“门面”后面的相关组件,以简化配置和
部署。模块公开了一组经过深思熟虑的、受限的
可以独立于组件而变化的配置参数
用于实现该模块
根据文档中描述的模块通用用例,通用用例是:
配置提供子系统的相关服务,例如数据访问
与NHibernate
就代码库而言,playerApiHttpClientModule
正在将PlayerDomainManager
配置为实现IPlayerDomainManager
的服务,并将其生存期配置为充当单例。其好处是,该模块允许PlayerDomainManager的深层配置需求(基础服务url,而基础服务url又是它的一个依赖项所需要的)以集中到模块构造函数的配置形式出现。如果配置更复杂,这种好处会更明显
模块需要按照任何其他依赖项向AutoFac注册:
builder.RegisterModule(新的PlayersAPIHttpClientModule(“基本服务url”);
反过来,它们配置的服务将使用标准的AutoFac依赖项解析进行解析
scope.Resolve();
因此,为了回答您的问题,您不会按照您的问题使用PlayersAPIHttpClientModule
ContainerBuilder注册播放器ApiHttpClientModule
容器
解析IDomainPlayerManager
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;
}
}