【发布时间】: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<IMovie, SMovie>()替换为services.AddScoped<SMovie>();
标签: c# asp.net-core .net-core