【发布时间】:2021-08-08 02:06:01
【问题描述】:
我正在关注 .NET Web API 中有关 MediatR 的教程,并遇到此错误:
System.AggregateException: 'Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: MediatR.IRequestHandler`2[Application.Activities.List+Query,System.Collections.Generic.List`1[Domain.Activity]] Lifetime: Transient ImplementationType: Application.Activities.List+Handler': Unable to resolve service for type 'Domain.DataContext' while attempting to activate 'Application.Activities.List+Handler'.)'
我不知道它是什么。这是我的代码:
活动类:
public class Activity
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public DateTime Date { get; set; }
public string City { get; set; }
public string Venue { get; set; }
}
DataContext.cs
public class DataContext : DbContext
{
public DbSet<Value> Values { get; set; }
public DbSet<Activity> Activities { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("server=localhost;database=Reactivities;uid=admin2;pwd=minhquan");
}
}
列表.cs
public class List
{
public class Query: IRequest<List<Activity>> { }
public class Handler : IRequestHandler<Query, List<Activity>>
{
private readonly DataContext context;
public Handler(DataContext context)
{
this.context = context;
}
public async Task<List<Activity>> Handle(Query request, CancellationToken cancellationToken)
{
var activities = await context.Activities.ToListAsync();
return activities;
}
}
}
程序.cs
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using(var scope = host.Services.CreateScope())
{
var service = scope.ServiceProvider;
try
{
var context = service.GetRequiredService<DataContext>();
context.Database.Migrate();
}
catch(Exception ex)
{
var logger = service.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error has occured during migration");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(opt => {
opt.AddPolicy("CorsPolicy", policy =>
{
policy.AllowAnyHeader().AllowAnyMethod().WithOrigins("http://localhost:3000");
});
});
services.AddMediatR(typeof(List.Handler).Assembly);
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1"));
}
app.UseRouting();
app.UseAuthorization();
app.UseCors("CorsPolicy");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
每当我运行程序时,它都会卡在var host = CreateHostBuilder(args).Build();,然后是错误
【问题讨论】:
标签: c# .net asp.net-web-api startup mediatr