[英]Create multiple instances of the same type with different behaviour in Moq (with Autofac)
[英]Create multiple instances of same dependency w/ different configuration
我有一個應用程序( IJobInit ),它使用JSON設置中的列表來創建一個類( IJob )的多個實例。 此類使用其他兩個依賴項IInputClient和IOutputClient進行一些工作。 它使用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.