簡體   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