NET Core InvalidOperationException: невозможно разрешить службу для типа при попытке активации - PullRequest
0 голосов
/ 20 марта 2020

У меня есть проблема, которую вы можете прочитать в заголовке этого вопроса. Я думаю, что это что-то о Dependency Injection topi c, я пытался решить, следуя решению других вопросов здесь, в stackoverflow, но не смог решить. Итак, я здесь.

В моем проекте есть слои Data, Business и Api. Мой уровень данных, с указанием c, Репозиторий имеет:

namespace Data.Repository
{
    public class RMovie : IMovie
    {
        private EDBContext db;
        public RMovie()
        {
            db = new EDBContext();
        }

        public List<Tmovie> Read()
        {
            var listMovies = db.Tmovie.ToListAsync().Result;
            return listMovies;
        }
    }
}

На бизнес-уровне, указав c, в Сервисах:

namespace Business.Services
{
    public class SMovie : IMovie
    {
        private RMovie dataMovie;

        public SMovie()
        {
            dataMovie = new RMovie();
        }

        public List<Tmovie> Read()
        {
            return dataMovie.Read();
        }
    }
}

В API слой, определяемый c в Контроллере:

using Business.Services;

namespace API.Controllers
{
    [Produces("application/json")]
    [Route("api/Movie")]
    public class MovieController : ControllerBase
    {
        private readonly SMovie _context;
        public MovieController(SMovie context)
        {
            _context = context;
        }

        [HttpGet]
        public IActionResult GetMovie()
        {
            return new ObjectResult(_context.Read());
        }
    }
}

И в запуске проекта Api у меня есть:

using Business.Interfaces;
using Business.Services;
using Data.Models;

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            var connection = @"Server=NAMEOFTHESQLSERVER;Database=EDB;Trusted_Connection=True;";
            services.AddDbContext<XXXContext>(options => options.UseSqlServer(connection));
            // Add application services.
            services.AddScoped<IMovie, SMovie>();
        }

Я думаю, что все в порядке, но это не так , При запуске проекта я получил следующее сообщение:

InvalidOperationException: невозможно разрешить службу для типа «Business.Services.SMov ie» при попытке активировать «API.Controllers.MovieController» .

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

Любой может помочь мне !, я буду признателен!

Спасибо.

1 Ответ

1 голос
/ 20 марта 2020

В вашем контроллере вы хотите ввести интерфейс. Поэтому измените контроллер на

private readonly IMovie _context;
public MovieController(IMovie context)
{
    _context = context;
}

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

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