.NET CORE 2.0 Не удается разрешить службу для типа при попытке активации - PullRequest
0 голосов
/ 24 мая 2018

У меня есть файл IDataRepository.cs, который содержит интерфейс и его реализацию следующим образом:

public interface IDataRepository<TEntity, U> where TEntity : class
{
    IEnumerable<TEntity> GetAll();
    TEntity Get(U id);
    TEntity GetByString(string stringValue);
    long Add(TEntity b);
    long Update(U id, TEntity b);
    long Delete(U id);
}

У меня есть другой класс TokenManager.cs, который реализует интерфейс IDataRepository:

public class TokenManager : IDataRepository<Token, long>
{
    ApplicationContext ctx;
    public TokenManager(ApplicationContext c)
    {
        ctx = c;
    }

    //Get the Token Information by ID
    public Token Get(long id)
    {
        var token = ctx.Token.FirstOrDefault(b => b.TokenId == id);
        return token;
    }

    public IEnumerable<Token> GetAll()
    {
        var token = ctx.Token.ToList();
        return token;
    }


    //Get the Token Information by ID
    public Token GetByString(string clientType)
    {
        var token = ctx.Token.FirstOrDefault(b => b.TokenClientType == clientType);
        return token;
    }

    public long Add(Token token)
    {
        ctx.Token.Add(token);
        long tokenID = ctx.SaveChanges();
        return tokenID;
    }

}

и, наконец, у меня есть контроллер, чтобы собрать все вещи вместе, мои файлы контроллера выглядят так:

[Route("api/[controller]")]
public class TokenController : Controller
{
    private IDataRepository<Token, long> _iRepo;
    public TokenController(IDataRepository<Token, long> repo)
    {
        _iRepo = repo;
    }

    // GET: api/values  
    [HttpGet]
    public IEnumerable<Token> Get()
    {
        return _iRepo.GetAll();
    }

    // GET api/values/produccion
    [HttpGet("{stringValue}")]
    public Token Get(string stringValue)
    {
        return _iRepo.GetByString(stringValue);
    }
}

Но проблема в том, что каждый раз, когда я пытаюсь получить доступ к какому-либо методу из моего API, например, используя почтальонЯ получаю сообщение об ошибке:

InvalidOperationException: невозможно разрешить службу для типа FECR_API.Models.Repository.IDataRepository`2 [FECR_API.Models.Token, System.Int64] при попытке активации; FECR_API.Controllers.TokenController

Я пытался использовать что-то подобное в ConfigureServices, но получаю ошибку преобразования

services.AddScoped<IDataRepository, TokenManager>();

Есть идеи, что я делаю неправильно?

1 Ответ

0 голосов
/ 25 мая 2018

Пожалуйста, убедитесь, что вы регистрируете зависимости в контейнере DI внутри Startup.cs

public class Startup
{  
    ...

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddScoped<IDataRepository<Token, long>, TokenManager>();
        ...
    }
}
...