当前位置: 首页 > 知识库问答 >
问题:

ASP。NET Core依赖项注入错误-在尝试激活“服务”时,无法解析“Repository”类型的服务

芮念
2023-03-14

我正在尝试创建ASP。NET核心应用程序使用通用存储库模式,使用实体框架和服务层。然而,每当我启动项目时,都会遇到以下错误:

无法解析“GameSource”类型的服务。数据存储库。GameRepository“正在尝试激活”GameSource。服务。游戏服务'。

游戏控制器。反恐精英:

    public class GamesController : Controller
    {
        private IGameService gameService;

        public GamesController(IGameService gameService)
        {
            this.gameService = gameService;
        }
    }

游戏服务。反恐精英:

    public class GameService : IGameService
    {
        private GameRepository gameRepo;

        public GameService(GameRepository gameRepo)
        {
            this.gameRepo = gameRepo;
        }
    }

游戏存储库。反恐精英:

    public class GameRepository : BaseRepository<Game>, IGameRepository
    {
        private GameSource_DBContext context;
        private DbSet<Game> gameEntity;

        public GameRepository(GameSource_DBContext context) : base(context)
        {
            this.context = context;
            gameEntity = context.Set<Game>();
        }
     }

BaseRepository。反恐精英:

    public class BaseRepository<T> : IBaseRepository<T> where T : class
    {
        private GameSource_DBContext context;
        private DbSet<T> entity;

        public BaseRepository(GameSource_DBContext context)
        {
            this.context = context;
            entity = context.Set<T>();
        }
    }

GameSource_DBContext.cs:

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

        public DbSet<Game> Game { get; set; }
        public DbSet<Genre> Genre { get; set; }
        public DbSet<Developer> Developer { get; set; }
        public DbSet<Publisher> Publisher { get; set; }
        public DbSet<Platform> Platform { get; set; }
    }

启动。反恐精英:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews().AddRazorRuntimeCompilation();

            services.AddDbContext<GameSource_DBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("GameSource_DB")));

            services.AddScoped(typeof(IBaseRepository<>), typeof(BaseRepository<>));
            services.AddScoped<IGameRepository, GameRepository>();
            services.AddScoped<IGameService, GameService>(); //Can't resolve service?
        }

正如您在启动时所看到的,我正在尝试注入我的服务和我的存储库,但在尝试激活GameService时无法解析GameRepository的服务。我错过了什么吗?这是与实体框架(即回购服务层)一起使用的正确方法吗?

谢谢你的耐心等待。

共有1个答案

葛阳
2023-03-14

在GameService中,将其更改为使用IGameRepository接口,如下所示:

public class GameService : IGameService
{
    private IGameRepository gameRepo;

    public GameService(IGameRepository gameRepo)
    {
        this.gameRepo = gameRepo;
    }
}

仅供参考,GameRepository无法解析,因为您已将依赖注入配置为在构造函数(而非具体实现)中使用接口IGameRepository时注入存储库。

 类似资料:
  • 我创建了一个。NET核心MVC应用程序,并使用依赖项注入和存储库模式将存储库注入控制器。但是,我得到一个错误: 无法解析类型WebApplication ation1的服务。数据。BloggerRepository'同时尝试激活'WebApplication 1.控制器。BlogController'. 型号(Blog.cs) DbContext(BloggingContext.cs) 存储库(I

  • 我创建了一个.NETCoreMVC应用程序,并使用依赖注入和存储库模式将存储库注入我的控制器。然而,我得到一个错误: 无法解析类型WebApplication1.Data.BloggerRepository的服务,而试图激活WebApplication1.Controllers.BlogController。 存储 库: 控制器: 启动. cs: 我不知道我做错了什么。有什么想法吗?

  • 我正在创建viewcomponents,下面是我的全部代码。。但当我调用这个viewcomponent时,我得到如下错误。。所以,任何人都可以帮助我解决这个问题,并向我解释到底是什么问题。 错误是: InvalidOperationException:无法解析“Perfulmestore”类型的服务。数据模型。ShoppingCart正在尝试激活香水商店。视图组件。ShoppingCartSumm

  • 在我的ASP. NET Core应用程序中,我收到以下错误: 无效操作异常:在尝试激活“城市”时无法解析类型“城市”的服务。模型。IRepository。控制器。HomeController。 我是家庭控制器,我试图将城市的getter传递给视图,如下所示: 我有一个文件存储库。cs包含一个接口及其实现,如下所示: 我的启动类包含从模板生成的默认代码。我做了任何更改:

  • 问题内容: 我正在测试服务A,但是服务A取决于服务B(即服务B已注入服务A)。 我已经看到了这个问题,但是我的情况有所不同,因为我认为_模拟_ 服务B而不是注入服务B的实际实例更有意义。我将用茉莉间谍对其进行模拟。 这是一个示例测试: 我得到的错误是: 错误:未知提供程序:serviceBProvider 我该怎么做? 问题答案: 实际上,在AngularJS中,依赖注入使用“最后获胜”规则。因此

  • 登录控制器中出现此错误。 无效操作异常:在尝试激活“汽车。服务器。控制器。AuthController”时,无法解析类型为“Microsoft. AspNetCore。身份。UserManager'1[汽车。模型。帐户]”的服务。 这是Auth Controller构造函数: 这里是启动中的ConfigureServices。反恐精英: