C# 如何使用在asp.net核心中接受DbContext作为参数的依赖项注入传递类
我有接受上下文类作为参数的UnitOFWork类,所以如何使用依赖项注入来传递这个类 这是我的课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
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);
}
}
}