【发布时间】:2021-07-09 05:57:40
【问题描述】:
我正在制作 asp .NET 核心 Web API,我制作了一些服务并注入了它,它工作正常。 我在同一个解决方案中创建了一个新的网络应用程序,我想使用相同的服务 我刚刚得到了
Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable serviceDescriptors, IServiceProviderEngine engine, ServiceProviderOptions options)
AggregateException:无法构造某些服务(验证服务描述符“ServiceType:E_CommerceApi.Services.IAttributeService Lifetime:Scoped ImplementationType:E_CommerceApi.Services.AttributeService”时出错:无法解析“E_CommerceApi.Authentication”类型的服务.ApplicationDbContext 尝试激活“E_CommerceApi.Services.AttributeService”。)
服务和 IService 代码
public interface IAttributeService
{
Task<AllAttributes> GetAll();
}
public class AttributeService : IAttributeService
{
private readonly ApplicationDbContext _db;
public AttributeService(ApplicationDbContext db)
{
_db = db;
}
}
在同一个项目中注入服务
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ConnStr")));
// register services
services.AddScoped<IAttributeService, AttributeService>();
}
在另一个不工作的 web 项目中注入服务
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<IAttributeService, AttributeService>();
}
【问题讨论】:
-
第二个项目似乎缺少对
AddDbContext<ApplicationDbContext>的调用。 -
你的意思是在我想使用这个服务的每个项目中添加和安装实体框架?
-
当您不注册它所依赖的
ApplicationDbContext时,您希望如何构造AttributeService? -
@esamaldinelzain:不是在每个项目中,但至少在每个Composition Root(即每个启动项目)中。
标签: c# asp.net-core dependency-injection .net-5