Как зарегистрировать шаблон репозитория в сервисе configure для класса запуска - PullRequest
0 голосов
/ 17 января 2019

Как зарегистрировать шаблон общего репозитория в классе запуска в функции конфигурации службы?

Я пытаюсь зарегистрировать шаблон репозитория в функции настройки сервиса на startup.cs, как показано ниже, но я получаю ошибку

InvalidOperationException: невозможно разрешить службу для типа 'TabDataAccess.Repositories.RepositoryTab`1 [TabDataAccess.Dto.Employee]' при попытке активировать 'WebTabCore.Controllers.EmployeeController'.

    public void ConfigureServices(IServiceCollection services)
            {

    services.AddScoped(typeof(IrepositoryTab<>), typeof(RepositoryTab<>));
services.AddDbContext<TabDbContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            }

Детали кода

public class Employee   
{   
public int EmployeeId { get; set; }    
public string EmployeeName { get; set; }   
} 


 public class TabDbContext : DbContext
    {
        public TabDbContext(DbContextOptions<TabDbContext> options)
: base(options)
        { }

        public DbSet<Employee> Employees { get; set; }
    }

public class RepositoryTab : IrepositoryTab where T : class   
{   
protected TabDbContext db { get; set; }   
private DbSet dbSet;  
public RepositoryTab(TabDbContext Tabdb)   
{              
db = Tabdb;              
dbSet = db.Set();   
}   
public IEnumerable GetAll()   
{  
 return dbSet.ToList();  
}   
}  

public interface IrepositoryTab where T : class
 {
 IEnumerable GetAll();        

 }  

On EmployeeController открытый класс EmployeeController: контроллер {

    private readonly IrepositoryTab<Employee> _repository;
    public EmployeeController(RepositoryTab<Employee> emp)
    {
        this._repository = emp;
    }
    public IActionResult Index()
    {
        var employees = _repository.GetAll();
        return View(employees);
    }
}

1 Ответ

0 голосов
/ 17 января 2019

Вы зарегистрировали его в коллекции услуг с:

services.AddScoped(typeof(IrepositoryTab<>), typeof(RepositoryTab<>));

Что буквально означает: «вводить RepositoryTab<> всякий раз, когда запрашивается IrepositoryTab<>». Тем не менее, ваш контроллер принимает RepositoryTab<> в своем конструкторе, и нет никакой регистрации службы для самого RepositoryTab<>. Другими словами, вам нужно изменить его на IrepositoryTab<> вместо:

public EmployeeController(IrepositoryTab<Employee> emp)
...