繁体   English   中英

如何使用接受 DbContext 作为 asp.net 核心中的参数的依赖注入来传递 class

[英]How to pass class using Dependency Injection that accept DbContext as a parameter in asp.net core

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

这是我的课

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 class 的实例。 谢谢你!

在您的 ConfigureServices 方法中(通常在 Startup 或 Program 中,具体取决于您的项目),定义服务。

services.AddScoped<Context>();
services.AddScoped<UnitOfWork>();

当构造一个请求UnitOfWork类型参数的 class 时,依赖注入器将构造UnitOfWork - 为此它还将构造Context 新创建UnitOfWork实例将被传递到下一个 class 中。

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

通常,要获得实际执行某些操作的 class,您需要在启动/程序文件中使用类似以下的方法: services.AddHostedService<UnitOfWorkWorkerService>() ASP.Net Core 中的services.AddControllersWithViews()将为您的所有 Controller 类执行类似的操作。 并且在某个地方有一个 class 可能会使用您的 DI 生成的类。 工作服务 class 将在 Main() 和 CreateHostBuilder() 中构建。

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

请注意,这些示例源自我拥有的托管服务应用程序,它们在概念上相似但比 ASP.Net Core 应用程序等更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM