Я создаю wep api, и это текущая структура:
API - The Web API (.net core web api project)
DAL - DbContext and Entities (.net core class library)
DTO - Data Transfert Objects - The classes I send to the client without sensible data (.net core class library)
REPO - Contains de Interfaces and Repositories (.net core class library)
Для информации у меня было все в одном проекте, и я решил разбить его на несколько библиотек классов.
What I ' Вы сделали до сих пор:
- Добавлены ссылки между каждым проектом
- Обновления использования
- Изменены имена пространств имен на правильные
- Решение как 0 ошибки
Я думаю, что моя проблема связана с внедрением зависимости, потому что, когда я пытаюсь получить доступ к контроллеру из почтальона или из браузера, возникает эта ошибка:
InvalidOperationException: Ошибка при проверке дескриптора службы «ServiceType: FootballManager.REPO.ILeagueRepository Lifetime: Scoped ImplementType: FootballManager.REPO.LeagueRepository»: невозможно разрешить службу для типа «FootballManager.DAL.FootballManagerAPIContext» при попытке активировать «FootballMpositLanager.RE.
Мой Startup.cs выглядит так: * 10 23 *
using FootballManager.REPO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace FootballManager.API
{
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(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
});
services.AddControllers().AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
services.AddScoped<ILeagueRepository, LeagueRepository>();
services.AddScoped<IMatchRepository, MatchRepository>();
services.AddScoped<IPlayerRepository, PlayerRepository>();
services.AddScoped<IRefereeRepository, RefereeRepository>();
services.AddScoped<ITeamRepository, TeamRepository>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseCors();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
Это код моего контроллера, в который я делаю инъекцию:
public class LeaguesController : ControllerBase
{
private readonly ILeagueRepository _repo;
public LeaguesController(ILeagueRepository repo)
{
_repo = repo;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<LeagueDto>>> GetLeagues()
{
return await _repo.GetAll();
}
}
Для моего соединения DbContext я сделал это непосредственно в проекте DAL, как это (я не думаю, что проблема здесь ):
public partial class FootballManagerAPIContext : DbContext
{
public FootballManagerAPIContext()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(@"Server =.\SQLEXPRESS; Database = FootballManagerAPI; Trusted_Connection = True;");
}
}
}
После нескольких часов работы в Интернете и переполнения стека я все еще не могу найти какое-либо рабочее решение ...
Как я могу решить эту ошибку и почему у меня это происходит? Спасибо.