如何使用接受 DbContext 作为核心参数的依赖关系注入传递类 asp.net



我有接受上下文类作为参数的类 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 类的实例。 谢谢!

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

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

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

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

通常,要获得实际执行某些操作的类,您需要在启动/程序文件中使用如下所示的方法:services.AddHostedService<UnitOfWorkWorkerService>(). ASP.Net Core 中的services.AddControllersWithViews()将对所有控制器类执行类似操作。 并在某个地方有一个可能使用 DI 生成的类的类。worker service 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 核心应用程序等更简单。

最新更新