Проблемы внедрения зависимостей в ядро ​​ASP.NET - PullRequest
0 голосов
/ 20 января 2019

У меня есть мини-проект ASP.NET, где я пытаюсь использовать принцип архитектуры Repository/UnitOfWork. Все должно работать как надо, однако я постоянно сталкиваюсь с проблемой зависимости в моем файле StartUp. Я не уверен, где я иду не так здесь. Любая помощь очень ценится.

Ошибка:

Произошло необработанное исключение при обработке запроса. InvalidOperationException: невозможно разрешить службу для типа «Project.UOW.IUnitOfWork» при попытке активировать «Project.Controllers.UsersController».

Вышеуказанная ошибка возникает, только когда я внедряю IUnitOfWork в качестве зависимости в файле запуска. Если я добавлю все три зависимости, я получу другую ошибку с эффектом =>

"Ошибка HTTP 502.3 - Bad Gateway. В указанном приложении CGI обнаружена ошибка, и сервер завершил процесс."

Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)

IRepository:

public interface IRepository<TEntity> where TEntity : class 
{
    Task<TEntity> GetById(int id);
    Task<IEnumerable<TEntity>> GetAll();
}

Repository:

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
        private readonly DbContext _context;
        public Repository(DbContext context)
        {
            _context = context;
        }

        public async Task<TEntity> GetById(int id)
        {
            return await _context.Set<TEntity>().FindAsync(id);
        }

        public async Task<IEnumerable<TEntity>> GetAll()
        {
            return await _context.Set<TEntity>().ToListAsync();
        }
}

IUserRepository:

  public interface IUserRepository : IRepository<User>
  {
        Task<IEnumerable<User>> GetAllUsers();
        IEnumerable<User> GetUserById(int Id);
  }

UserRepository:

public class UserRepository : Repository<User>, IUserRepository
{

    public UserRepository(DbContext context)
        : base(context)
    {

    }

    public IEnumerable<User> GetUserById(int Id)
    {
        return Context.User.Where(p => p.UserId == Id).ToList();
    }

    public async Task<IEnumerable<User>> GetAllUsers()
    {
        return await Context.User.ToListAsync();
    }
}

UnitOfWork:

public class UnitOfWork : IUnitOfWork
{
        private DbContext _context;

        public UnitOfWork(DbContext context)
        {
            _context = context;
            User = new UserRepository(_context); 
        }

        public IUserRepository User { get; set; }

        public int Complete()
        {
            return _context.SaveChanges();
        }

        public void Dispose()
        {
            _context.Dispose();
        }

}

IUnitOfWork:

 public interface IUnitOfWork : IDisposable
 {
        IUserRepository User { get; set; }
        int Complete();
 }

Запуск:

services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddTransient<IUserRepository, UserRepository>();
services.AddTransient(typeof(IRepository<>), typeof(Repository<>));

UserController:

 public class UsersController : Controller
 {
        private IUnitOfWork _unitOfWork;

        public UsersController(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }

        // GET: Users
        public async Task<IActionResult> Index()
        {
            var getAllUsers = _unitOfWork.User.GetAllUsers();

            return View(await getAllUsers);
        }
}

1 Ответ

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

Эта проблема, похоже, решилась сама собой, просто запустив новый проект. Так что спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...