【问题标题】:NET Core InvalidOperationException: Unable to resolve service for type while attempting to activateNET Core InvalidOperationException:尝试激活时无法解析服务类型
【发布时间】:2020-07-01 17:03:27
【问题描述】:

我有一个问题,您可以阅读此问题的标题。我认为是关于依赖注入主题的事情,我试图在stackoverflow中按照其他问题的解决方案来解决,但我无法解决。所以,我来了。

我的项目有数据、业务和 API 层。我的数据层,具体来说,存储库有:

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;
        }
    }
}

在业务层,具体来说,在服务中:

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

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

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

在API层,具体在Controller中:

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:尝试激活“API.Controllers.MovieController”时无法解析“Business.Services.SMovie”类型的服务

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

任何人都可以帮助我!,我将不胜感激!

谢谢。

【问题讨论】:

  • 您需要将services.AddScoped&lt;IMovie, SMovie&gt;() 替换为services.AddScoped&lt;SMovie&gt;();

标签: c# asp.net-core .net-core


【解决方案1】:

在您的控制器中,您想要注入接口。所以把控制器改成

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

还要确保您已在接口中定义了所有方法调用和属性,以便您可以在控制器中访问它们。

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2020-02-08
    • 2021-04-29
    • 2018-11-04
    • 2021-02-23
    • 2020-05-18
    • 2018-06-08
    • 2018-07-07
    相关资源
    最近更新 更多