c# - 使用依赖注入连接控制器的正确方法
问题描述
如果我有一个控制器接收并处理用户选择的操作,然后想使用另一个控制器来存储所有与数据库相关的逻辑,那么在允许第二个控制器与数据库上下文交互的同时连接这些控制器的正确方法是什么.
目前,我使用它在第一个控制器中创建数据库上下文,然后在我使用 DI 连接两者时将其解析到数据库控制器,但希望有人可以向我展示正确的方法。
public class TestController : Controller
{
private readonly DatabaseContext context;
private Database.UserController userDatabaseController;
public TestController(DatabaseContext db)
{
context = db;
userDatabaseController = new Database.UserController(context);
}
}
数据库控制器
public class UserController : Controller
{
private readonly DatabaseContext context;
public UserController(DatabaseContext ctx)
{
context = ctx;
}
public bool RegisterUser(Models.DatabaseModels.UserModel model)
{
try
{
context.Users.Add(model);
context.SaveChanges();
return true;
}
catch (Exception e)
{
return false;
}
}
}
启动.cs
services.AddDbContext<DatabaseContext>
(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
数据库上下文
public class DatabaseContext : DbContext
{
public DatabaseContext(DbContextOptions<DatabaseContext> options)
: base(options)
{ }
public DbSet<DatabaseModels.UserModel> Users { get; set; }
}
解决方案
“正确”的方法是:你没有。一个控制器不应该直接调用另一个控制器。您可以重定向到映射到不同控制器的新路由,仅此而已。如果您有一些需要共享的通用逻辑,那么应该将其分解为两个控制器都可以使用的完全不同的类。
推荐阅读
- mysql - MySql:更新除第一行之外的所有内容
- c++ - Hyperscan 扫描时间过长
- symfony - Symfony Messenger 组件失去连接并重复保存记录
- networking - 从ip地址查找域名
- android - Forge Offline 最新版本 *7 Js 和 Css 文件我需要在哪里找到对于移动设备 Android、IOS
- azure-devops - 如何在 Azure DevOps 工作项页面上添加按钮控件
- python - 在 python 中使用 scipy.integrate.solve_ivp 时,有没有办法绑定变量的值?
- ms-access - 如何更改 MS Access 2010 数据库项目源文件的编码
- highcharts - 更改 Highcharts Treemap 上的后退按钮的文本?
- python - 当 transaction.atomic 回滚时,Django 可以更改模型实例状态吗?