首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IHttpClientFactory与SimpleInjector in AzureFunctions

IHttpClientFactory与SimpleInjector in AzureFunctions
EN

Stack Overflow用户
提问于 2022-08-05 16:44:00
回答 1查看 100关注 0票数 0

在使用v3 5.3的Azure函数(NetCore3.1上的SimpleInjector )中,我遵循了这里的指导,使用IHttpClientFactory而不是依赖于MS DI构造的HttpClient的类型化客户机,但是SimpleInjector也不能解析IHttpClientFactory。

代码语言:javascript
复制
public class FooClient
{
    private IHttpClientFactory _clientFactory;
    private FooClientConfig _config;        
    public FooClient(IHttpClientFactory clientFactory, FooClientConfig config) 
    {
        _clientFactory = clientFactory;
        _config = config;           
    }
}
代码语言:javascript
复制
public class Startup : FunctionsStartup
{  
    public void ConfigureServices(IServiceCollection services)
    {   
        services.AddHttpClient();
    
        var container = new Container();
        container.RegisterInstance<FooClientConfig>(new FooClientConfig() { ApiKey = Configuration.GetValue<string>("FooApiKey") });
        container.Register<FooClient>();

        services.AddSimpleInjector(container);
    }
}
代码语言:javascript
复制
public class FooCommandHandler 
{
    private readonly FooClient _fooClient;
    
    public FooCommandHandler (FooClient client) 
    {
      _fooClient = fooClient;
    }
}

然后,我使用容器来激活命令/查询中介,但是容器找不到用于FooClient的FooClient。

SimpleInjector.ActivationException:“配置无效。为FooClient类型创建实例失败。类型FooClient的构造函数包含名称为”clientFactory“和类型IHttpClientFactory的参数,但IHttpClientFactory未注册。要解决IHttpClientFactory问题,必须在容器中注册。由于启用了Container.Options.EnableAutoVerification,因此触发了验证。若要防止容器在第一次解析时被验证,请将Container.Options.EnableAutoVerification设置为false.‘。

我想我的问题是,我应该在哪里设置简单喷射器的自动交叉布线?我认为对services.AddSimpleInjector(container);的调用将使MS DI注册的IHttpClientFactory对容器可用,从而使其中的注册可用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-07 17:49:10

按照史蒂文在SimpleInjector文档中精心组装的SimpleInjector,使用IHttpClientFactory代替任何类型的客户端,我终于能够让它正常工作了--不过,这并不好看。

我建议,如果您在旧的Azure功能生态系统(非孤立的)中使用Http工厂模式以外的其他任何东西,那么您就可以了。正是某些服务的交叉连接,如HttpClient在引擎盖下,使这件事变得一团糟。希望这能帮助其他面临同样问题的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73252962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档