【发布时间】:2017-01-11 18:21:33
【问题描述】:
好的,所以我在运行时将一个类实例添加到startup.cs 的服务集合中,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<WidgetProvider, BlueWidgetProvider>();
}
但是,在运行时,我希望应用程序能够将 BlueWidgetProvider 替换为 RedWidgetProvider。我该怎么做呢?我知道您可以在IServicesCollection 上使用Remove 方法,但是我如何将其公开给我的应用程序?我可以公开添加了WidgetProvider 的IServiceProvider,如下所示,但我不确定如何访问底层服务集合。
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
Current.Services = host.Services; //Here
host.Run(Current.AppCancellationSource.Token);
}
【问题讨论】:
-
你如何确定应用程序需要哪个 WidgetProvider ?
-
可能只是用户输入,让用户无需重新启动整个应用程序即可更改 WidgetProvider。
标签: c# .net dependency-injection asp.net-core