繁体   English   中英

创建具有不同配置的相同依赖项的多个实例

[英]Create multiple instances of same dependency w/ different configuration

我有一个应用程序( IJobInit ),它使用JSON设置中的列表来创建一个类( IJob )的多个实例。 此类使用其他两个依赖项IInputClientIOutputClient进行一些工作。 它使用M.Extensions.DependencyInjection创建一个容器,该容器将移交给AutoFac以创建一个IContainer。

IJobInit(IContainer container)

我希望为每个IJob实例配置不同的IInputClient。 具体来说,我想传递一个秘密供其使用。 结果将是:

IInputClient(HttpClient client)

使用ConfigureHttpClient配置 HttpClient的位置,以使IJob不知道它已预先认证。 这也将是合适的:

IInputClient(ISecretProvider secretsProvider, string secretName)

最终结果是IJob的三个实例的IInputClient配置不同。

IJob(IInputClient inputClient1, IOutputClient outputClient)
IJob(IInputClient inputClient2, IOutputClient outputClient)
IJob(IInputClient inputClient3, IOutputClient outputClient)

我该如何实现? 我一直在查看Autofac范围,但是这些控件在创建实例时对它们的配置没有任何控制(除非我错过了它)。

一位同事建议我能举办IJob的每个实例在自己的进程有其自己的配置可能的,但我试图运行所有的工作在一个单一的Azure的功能和使用列表中配置创造就业内。

谢谢!

我对这种解决方案并不完全满意,但它现在可以使用。

        private async Task<IInputClient> GetClientAsync(string secretId)
        {
            HttpClient httpClient = this.httpClientFactory.CreateClient();

            string secret = await this.secretsProvider.GetSecretAsync(secretId);
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Concat(":", secret))));

            return this.scope.Resolve<IInputClient>(new TypedParameter(typeof(HttpClient), httpClient));
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM