【发布时间】:2020-10-27 07:31:20
【问题描述】:
我有 ASP.NET Core 应用程序,我需要从外部 AWS 服务获取数据库凭证。本质上,我需要将 CredentialRetrievalService 注入 Startup.cs。不久前,我发现了一个example,它完美地描述了如何做到这一点:
在Program.cs:
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(serviceCollection =>
serviceCollection.AddScoped<ISomeService, SomeService>())
.UseStartup<Startup>()
.Build();
}
在Startup.cs:
private ISomeService _someService;
public Startup(IConfiguration configuration, ISomeService someService)
{
_someService = someService;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// Just to see that everything works - and it does!
services.AddMvc(options =>
{
options.MaxModelValidationErrors = _someService.GetNumber(Configuration.GetValue<int>("MaxModelValidationErrors"));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
}
现在我正在尝试将应用程序升级到 ASP.NET Core 3。我可以看到有breaking change,上面的代码不再起作用了。建议的操作是将服务注入Startup.Configure 方法。但是如果需要在ConfigureServices调用注入服务怎么办呢?
【问题讨论】:
-
从
IWebHost BuildWebHost切换到IHostBuilder CreateHostBuilder是否可行? (1) -
@PeterCsala - 是的,在 Core 3 中我使用的是
IHostBuilder。使用IWebhost它甚至无法编译。BuildWebHost/CreateHostBuilder只是Program类中的一个局部函数名
标签: c# asp.net-core dependency-injection asp.net-core-3.1