繁体   English   中英

As.net core 5.0 在 startup.cs 构造函数中注入依赖

[英]Aspnet core 5.0 inject dependency in startup.cs constructor

我正在尝试使用以下方法向 Asp.net 核心中的 Startup class 的构造函数添加一个参数: https://mattmazzola.medium.com/asp.net-core-injecting-custom-data-classes-into-startup-类构造函数和配置方法 7cc146f00afb

但是,这对我不起作用。 这是我的 C# 代码:

public class AppAProgram
{
    #region Members
    private IHostBuilder hostBuilder;

    private IHost host;
    #endregion

    #region Constructors
    public AppAProgram(string[] args)
    {
        this.hostBuilder = Host.CreateDefaultBuilder(args);
        ILauncherContext launcherContext = new DummyLauncherContext();
        this.hostBuilder.ConfigureServices((hostContext, services) => { services.AddSingleton<ILauncherContext>(launcherContext); });
        this.hostBuilder.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<AppAStartup>(); });
        this.host = hostBuilder.Build();
    }
    #endregion

    public static void Main(string[] args)
    {
        AppAProgram appAProgram = new AppAProgram(args);    
        appAProgram.Start();
    }

    public void Start()
    {
        this.host.Run();
    }
}

这是我为其添加注入参数的构造函数:

    #region Constructors
    public AppAStartup(IConfiguration configuration, ILauncherContext launcherContext)
    {
        Configuration = configuration;
        this.launcherContext = launcherContext;
    }
    #endregion

当我这样做时,我得到这个异常:

System.InvalidOperationException:“在尝试激活‘Spike.Run.AppA.AppAStartup’时无法解析‘Spike.Run.Launcher.ILauncherContext’类型的服务。”

参考创业公司 class

使用通用主机(IHostBuilder)时,只能将以下服务类型注入到启动构造函数中:

  • IWebHostEnvironment
  • 主机环境
  • I配置

...

大多数服务在调用Configure方法之前不可用。

强调我的

请改用Configure方法

public AppAStartup(IConfiguration configuration) {
    Configuration = configuration;        
}

public void Configure(IApplicationBuilder app, ..., ILauncherContext launcherContext) {

    //access launcherContext here

    //...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM