我有两个策略,分别命名为CompanySyncStrategy和项目同步策略.
CompanySyncStrategy.cs
public class CompanySyncStrategy : ISyncStrategy
{
private readonly ICompanyService companyService;
public CompanySyncStrategy(ICompanyService companyService)
{
this.companyService = companyService;
}
public void Sync()
{
//sync code
}
}
项目同步策略
public class 项目同步策略 : ISyncStrategy
{
private readonly IProjectService projectService;
public 项目同步策略(IProjectService projectService)
{
this.projectService = projectService;
}
public void Sync()
{
//sync code
}
}
Program.cs文件如下所示
builder.Services.AddScoped<ICompanyService, CompanyService>();
builder.Services.AddScoped<IProjectService, ProjectService>();
builder.Services.AddScoped<ISyncContext, SyncContext>();
builder.Services.AddScoped<ISyncStrategy, CompanySyncStrategy>();
builder.Services.AddScoped<ISyncStrategy, 项目同步策略>();
builder.Services.AddSingleton<ISyncStrategyFactory, SyncStrategyFactory>();
当try 在运行时获取策略时,我从SyncStrategyFactory得到以下错误
System.InvalidOperationException: 'No service for type 'Strategy.Services.CompanySyncStrategy' has been registered.'个
SyncStrategy yFactory类如下所示
public class SyncStrategyFactory : ISyncStrategyFactory
{
private readonly IServiceProvider serviceProvider;
public SyncStrategyFactory(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
public ISyncStrategy GetSyncStrategy(string strategyType)
{
switch (strategyType)
{
case "company":
return serviceProvider.GetRequiredService<CompanySyncStrategy>();
case "project":
return serviceProvider.GetRequiredService<项目同步策略>();
default:
throw new InvalidOperationException();
}
}
}
我不能在这里使用依赖注入吗? 我做错了什么?