Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用在asp.net核心中接受DbContext作为参数的依赖项注入传递类_C#_Asp.net Core_.net Core_Dependency Injection - Fatal编程技术网

C# 如何使用在asp.net核心中接受DbContext作为参数的依赖项注入传递类

C# 如何使用在asp.net核心中接受DbContext作为参数的依赖项注入传递类,c#,asp.net-core,.net-core,dependency-injection,C#,Asp.net Core,.net Core,Dependency Injection,我有接受上下文类作为参数的UnitOFWork类,所以如何使用依赖项注入来传递这个类 这是我的课 public class UnitOfWork { public Context context; public UnitOfWork(Context context) { this.context = context; } } public class Context : DbContext { public Context(DbC

我有接受上下文类作为参数的UnitOFWork类,所以如何使用依赖项注入来传递这个类

这是我的课

public class UnitOfWork
{
    public Context context;

    public UnitOfWork(Context context)
    {
        this.context = context;
    }
}

 public class Context : DbContext
 {
     public Context(DbContextOptions<Context> options) : base(options)
     {
     }
 }
公共类UnitOfWork
{
公共语境;
公共工作单元(上下文)
{
this.context=上下文;
}
}
公共类上下文:DbContext
{
公共上下文(DbContextOptions):基本(选项)
{
}
}
因此,如何使用依赖项注入传递unitofwork类的实例。
谢谢大家!

在ConfigureServices方法中(通常在启动或程序中,具体取决于您的项目),定义服务

services.AddScoped<Context>();
services.AddScoped<UnitOfWork>();
通常,要获得实际执行某些操作的类,您需要在启动/程序文件中使用如下方法:
services.AddHostedService()
。 ASP.Net Core中的
services.AddControllersWithViews()
将对所有控制器类执行类似的操作。 并且在某个地方有一个类可以使用DI生成的类。工人服务类将在CreateHostBuilder()的Main()中构造


请注意,这些示例是从我拥有的托管服务应用程序派生出来的,这些应用程序在概念上类似于ASP.Net核心应用程序,但比ASP.Net核心应用程序等更简单。

在启动代码中向DI框架注册服务,如
services.addScope()
?通常情况下,您不希望在实体框架周围添加工作单元层,因为它本身就是其中之一。@CodeCaster:theternal argue:P如果DbContext是可单元测试的,通常我会同意您的意见,但它不是。这就是为什么99%的人在谷歌上把它抽象出来的原因。
public class DoesWork
{
    UnitOfWork _unit;
    public DoesWork(UnitOfWork unit)
    {
        _unit = unit;
    }
    public void Work()
    {
        Console.WriteLine("A non-null unit was passed in: {0}.", _unit != null);
    }
}
public class UnitOfWorkWorkerService : BackgroundService
{
    public UnitOfWorkWorkerService(DoesWork fromDependencyInjection)
    {
        _doesWork = fromDependencyInjection;
    }
    private readonly DoesWork _doesWork;
    // This method will be called when your application is started.
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _doesWork.Work();
            await Task.Delay(1000, stoppingToken);
        }
    }
}