![](/img/trans.png)
[英]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.