在我们公司中,我们使用BaseSettings
,其中包含登录凭据。通常通过Environment变量来接收它,因此我正在创建一种方法,该方法允许每个人也以自己的方式注册此对象。另一个服务将在对其他服务进行基本auth http调用时重用这些凭据。这是第一种方法
public static void AddBaseSettings(this IServiceCollection services, Action<BaseSettings> baseSettings = null)
{
BaseSettings base = new BaseSettings();
base.PASSWORD = Environment.GetEnvironmentVariable("PASSWORD");
base.ID = Environment.GetEnvironmentVariable("ID");
services.AddSingleton<BaseSettings>(options =>
{
if(baseSettings == null)
{
return base;
}
else {
baseSettings.Invoke(base);
return base;
}
});
}
因此,现在我需要为所有人提供一种方法,该方法将再次需要BaseSettings
对象。我想不出一个很好的干净方法,只有在运行时才会出现对这个对象进行空检查的情况,前提是提供另一个操作可以重新配置BaseSettings。在对象中实例化一个新的BaseSettings
并将其从method参数中删除,也可能导致运行时问题,并向客户端隐藏逻辑。这是我的基本身份验证客户端。
public static void AddBasicClient(this IServiceCollection services, BaseSettings baseSettings)
{
services.AddHttpClient("BasicClient", client =>
{
client.Timeout = TimeSpan.FromMinutes(10);
var byteArray = Encoding.ASCII.GetBytes(baseSettings.ID + ":" + baseSettings.PASSWORD);
client.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(byteArray));
});
}
现在我必须创建一个将使用httpclient的http服务。 .NetCore处理配置需要在多个其他服务/对象之间重用的多个服务/对象的方式是什么?