注册具有依赖项注入的服务

我希望具有以下结构

一个Repository注入了DbContextController注入了Repository

因此,控制器使用存储库,并且存储库中已包含上下文。

所以我在startup.cs

中注册了上下文

services.AddDbContext<DbContext> x => x.UseSqlServer(Configuration.Getvalue<string>("AppSettings:DBCS")));

在上述行正下方注册回购

services.AddScoped(x => new DB.Tasker.LogEntryRepo());

,然后在控制器内部使用DIed存储库

private LogEntryRepo _repo;
    public LogsController(LogEntryRepo repo)
    {
        _repo = repo;
    }

问题是编译器抱怨这行services.AddScoped(x => new DB.Tasker.LogEntryRepo());很可疑,因为仓库显然没有无参数控制器。 完成我要完成的工作的正确方法是什么?

yxm407949656 回答:注册具有依赖项注入的服务

您在Startup.cs中注册它们

services.AddScoped<IMyRepository,MyRepository>();
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetValue<string>("AppSettings:DBCS")));

将DbContext放入存储库

public MyRepository(MyDbContext myDbContext)
{
   _dbContext = myDbContext;
}

然后将存储库DI到Controller中。请注意,我们使用的是IMyRepository,而不是MyRepository。在Startup.cs中注册时,我们告诉它要DI的存储库。确保您的存储库实现了您的界面。

public MyController(IMyRepository myRepository)
{
   _repository = myRepository;
}

然后,您可以在控制器中执行类似的操作

_repository.DoSomeDatabaseStuff(param1,param2);

如果您不利用接口,那么您将忽略DI的强大功能。这样一来,您还可以执行诸如创建UnitTest的操作,从而在其中模拟存储库。

services.AddScoped<IMyRepository,MyMockRepository>();

在MyMockRepository中,您可以伪造数据,或确保您的数据库连接和查询正常工作,而只是无法提交或自动回滚更改。

本文链接:https://www.f2er.com/3157766.html

大家都在问