ASP Net Core如何配置可能依赖于重用相同设置的多个服务

时间:2019-02-15 22:35:25

标签: asp.net-core .net-core

在我们公司中,我们使用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处理配置需要在多个其他服务/对象之间重用的多个服务/对象的方式是什么?

0 个答案:

没有答案