我設定了一個工廠方法,以根據一個字串值回傳兩個不同的IDeployApplicationService的實作。
我已經嘗試了 Program.cs 中的 .AddScoped() 或 .AddTransient() 的幾種變化,但不確定為什么這個錯誤一直存在。
我的工廠
public class DeployApplicationServiceFactory 。IDeployApplicationServiceFactory : IDeployApplicationServiceFactory 。
{
private readonly IServiceProvider serviceProvider。
public DeployApplicationServiceFactory(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider。
}
public IDeployApplicationService GetService(string environment) { this.serviceProvider = serviceProvider;
{
if (environment.ToLower() == "prod"/span>)
{
//在下面的行中拋出了錯誤。。
//發生了一個'System.InvalidOperationException'型別的例外。
//在Microsoft.Extensions.DependencyInjection.Abstractions.dll中
//但在用戶代碼中沒有處理。'沒有型別的服務
//'ProdDeployApplicationService'已被注冊。'
return serviceProvider.GetRequiredService<ProdDeployApplicationService>()。
}
else
{
return serviceProvider.GetRequiredService<NonProdDeployApplicationService>()。
}
}
Program.cs(這是一個作業者)
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.ConfigureServices((hostContext, services) =>
{
//[...]/span>
services.AddScoped<IDeployApplicationServiceFactory, DeployApplicationServiceFactory>()。
services.AddScoped<IDeployApplicationService, ProdDeployApplicationService>()。
services.AddScoped<IDeployApplicationService, NonProdDeployApplicationService>()。
//[...]。
}
uj5u.com熱心網友回復:
你已經通過其介面注冊了服務:
services.AddScoped<IDeployApplicationService, ProdDeployApplicationService> ()
這意味著你只能通過介面serviceProvider.GetRequiredService<IDeployApplicationService>()來解決,而這將給你提供由該介面注冊的最后一個服務,NonProdDeployApplicationService。
嘗試自己注冊(實作):
services.AddScoped<ProdDeployApplicationService>()。
現在你可以直接解決實作問題了:
serviceProvider.GetRequiredService<ProdDeployApplicationService>()。
請記住,你可以多次注冊一個類:既可以通過它本身,也可以通過它實作的介面/抽象類來注冊:
// this is ok
services.AddScoped<ProdDeployApplicationService>()。
services.AddScoped<IDeployService, ProdDeployApplicationService>()。
services.AddScoped<IDeployApplicationService, ProdDeployApplicationService>()。
并使用任何鍵來解決它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/321588.html
標籤:
上一篇:JSON回應內容的選擇器
下一篇:【jQuery>節點方法
