Не удалось разрешить службу для типа xxx.Infrastructure при попытке активировать xxx.Infrastructure.TagRepository. - PullRequest
1 голос
/ 29 марта 2019

Я получаю сообщение об ошибке ниже.Я использую .Net Core web API.

Произошло необработанное исключение при обработке запроса.InvalidOperationException: невозможно разрешить службу для типа «xxx.Infrastructure.Data.xxxContext» при попытке активировать «xxx.Infrastructure.Repository.TagRepository».

Api Controller

namespace xxx.API.Controllers
{
    [Route("api/Default")]
    [ApiController]
    public class DefaultController:ControllerBase
    {
         private ITagRepository _tagRepository;
        public DefaultController(ITagRepository tagRepository)
    {
         _tagRepository = tagRepository;
    }

    [HttpGet]
    public string GetAllUserInfo()
    {
        try
        {
            var Tags = _tagRepository.GetAllTagsByInstanceId("");
            if (Tags == null)
            {
                Tags = new List<TagEntity>();
            }
            return Tags.ToString();
        }
        catch (Exception ex)
        {
            return null;
        }
    }
}

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.AddMvc().AddControllersAsServices();
        services.AddSingleton<ModulePermissionHelper>();
        services.AddScoped<ITagRepository, TagRepository>();
        services.AddScoped<ITagModuleRepository, TagModuleRepository>();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }
}

ITagRepository

public interface ITagRepository
{
    List<TagEntity> GetAllTagsByInstanceId(string instanceId);
}

1 Ответ

0 голосов
/ 29 марта 2019

На основании сообщения об исключении и показанного запуска контейнер DI не знает о требуемой зависимости для правильной активации требуемого типа.

Вам необходимо зарегистрировать DbContext с соответствующими конфигурациями во время запуска

public void ConfigureServices(IServiceCollection services) {
    services.AddMvc().AddControllersAsServices();
    services.AddSingleton<ModulePermissionHelper>();
    services.AddScoped<ITagRepository, TagRepository>();
    services.AddScoped<ITagModuleRepository, TagModuleRepository>();

    //..
    services.AddDbContext<xxxContext>(options => ...);
}

Документация: Использование DbContext с внедрением зависимости

...