Autofac - 从 .net 核心 2.2 升级到 3.1

Autofac - upgrading from .net core 2.2 to 3.1

我正在关注 Autofac guide 迁移到 .net 3.1

根据他们的指南,我需要添加(除其他外)这个功能:

public void ConfigureContainer(ContainerBuilder builder)

这将被自动调用

问题是其中注册服务的代码对我们的应用程序来说是有条件的,所以我需要向函数传递一个布尔值

例如:

public void ConfigureContainer(ContainerBuilder builder)
{
 if (enableTokenAutoRefresh)
 {
   builder.RegisterType<AuthenticationWrapper>()
    .As<IApiProxy>()
 }
 else
 {
   builder.RegisterType<ApiProxy>()
    .As<IApiProxy>()
 }
}

我可以只向 ConfigureContainer 方法添加一个布尔值吗? 似乎这会打破对它的呼唤? 如果没有 - 如何将数据传递给它?

请帮忙

ConfigureContainer,由 ASP.NET 核心框架提供,仅采用 DI 框架的容器构建器类型(在本例中为 Autofac ContainerBuilder)。要在其中获取其他数据,您需要在启动管道的较早位置的 Startup class 上设置一个变量并使用它。

// NOT a complete Startup, but gives you the idea.
public class Startup
{
  public Startup(IConfiguration config)
  {
    // appSettings.json has the value you want
    this.EnableTokenAutoRefresh = config.GetValue<bool>("path:to:key");
  }

  public bool EnableTokenAutoRefresh { get; set; }

  public void ConfigureContainer(ContainerBuilder builder)
  {
    if(this.EnableTokenAutoRefresh)
    {
      // Do what you need to based on config
    }
  }
}