[英]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.