c# - 具有依赖注入的 EF 核心 DbContext
问题描述
我创建了一个可注入的 dbcontext
启动.cs:
public void ConfigureServices(IServiceCollection services) {
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddDbContext<DBContext>(options => options.UseSqlServer("Server=localhost;Database=mydb;Trusted_Connection=True;"));
}
工作单位:
public class UnitOfWork : IUnitOfWork {
private readonly DBContext _context;
public UnitOfWork(DBContext context) {
_context = context;
}
控制器中的注入工作正常:
public class UserController : ControllerBase {
private readonly IUnitOfWork unitOfWork;
public UserController(IUnitOfWork unitOfWork) {
this.unitOfWork = unitOfWork;
}
}
如何创建在构造函数中采用 IUnitOfWork 并从主程序调用它的自定义类?
自定义类:
public class CustomClass {
private readonly IUnitOfWork unitOfWork;
public CustomClass(IUnitOfWork unitOfWork) {
this.unitOfWork = unitOfWork;
}
}
主程序:
public class Program {
public static void Main(string[] args) {
var unitOfWork=new UnitOfWork() // Here I don't want to pass new DBContext I want to reach the same injected DBContext
var customClass =new CustomClass (unitOfWork);
}
}
解决方案
首先,将您的代码从ConfigureServices
Web 和控制台项目都可以使用的某个共享库中移出。创建扩展方法来配置您的所有服务。
using Microsoft.Extensions.DependencyInjection;
namespace ConsoleApp13
{
public static class ConfigureServicesExtensions
{
public static void ConfigureMyServices(this IServiceCollection serviceCollection)
{
serviceCollection.AddDbContext<ApplicationDbContext>();
serviceCollection.AddScoped<IUnitOfWork, UnitOfWork>();
serviceCollection.AddScoped<CustomClass>();
}
}
}
这就是您的控制台应用程序的外观
using Microsoft.Extensions.DependencyInjection;
namespace ConsoleApp13
{
class Program
{
static void Main(string[] args)
{
var serviceCollection = new ServiceCollection();
serviceCollection.ConfigureMyServices();
using var serviceProvider = serviceCollection.BuildServiceProvider();
using var scope = serviceProvider.CreateScope();
var myService = scope.ServiceProvider.GetService<CustomClass>();
}
}
}
还有你的网络项目
public void ConfigureServices(IServiceCollection services)
{
services.ConfigureMyServices();
}
推荐阅读
- php - 错误“找不到文件”。在 wordpress 中使用 nginx
- reactjs - Material Ui 自动完成 - 过滤选项未按预期工作
- oracle-apex - 如何在 oracle apex sql 命令查询结果中添加自定义标题
- c - 使用电缆环回在 C 中进行串行通信
- javascript - 如何匹配两个数组并更改元素ID与打字稿中的另一个ID匹配的颜色
- python - 根据 if 条件创建一个新列,但在 python 中出现错误
- kubernetes - 在没有相关运算符的情况下创建 crd 会发生什么?
- python - 如何在 flask-sqlalchemy 中将 charset 设置为 utf8mb4 以避免 pymysql.err.DataError: (1366, "Incorrect string value:
- kendo-ui - JavaScript:设置输入后如何触发更新表单
- python - 熊猫数据框矢量化分桶/聚合?