在使用v3 5.3的Azure函数(NetCore3.1上的SimpleInjector )中,我遵循了这里的指导,使用IHttpClientFactory而不是依赖于MS DI构造的HttpClient的类型化客户机,但是SimpleInjector也不能解析IHttpClientFactory。
public class FooClient
{
private IHttpClientFactory _clientFactory;
private FooClientConfig _config;
public FooClient(IHttpClientFactory clientFactory, FooClientConfig config)
{
_clientFactory = clientFactory;
_config = config;
}
}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);
}
}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对容器可用,从而使其中的注册可用。
发布于 2022-08-07 17:49:10
按照史蒂文在SimpleInjector文档中精心组装的SimpleInjector,使用IHttpClientFactory代替任何类型的客户端,我终于能够让它正常工作了--不过,这并不好看。
我建议,如果您在旧的Azure功能生态系统(非孤立的)中使用Http工厂模式以外的其他任何东西,那么您就可以了。正是某些服务的交叉连接,如HttpClient在引擎盖下,使这件事变得一团糟。希望这能帮助其他面临同样问题的人。
https://stackoverflow.com/questions/73252962
复制相似问题