C# 使用依赖项注入连接控制器的正确方法

C# 使用依赖项注入连接控制器的正确方法,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,如果有一个控制器接收并处理用户选择的操作,然后希望使用另一个控制器存储所有与数据库相关的逻辑,那么在允许第二个控制器与数据库上下文交互的同时,连接这些控制器的正确方法是什么 目前,我正在第一个控制器中创建一个数据库上下文,然后在使用DI连接这两个控制器时将其解析到数据库控制器,但希望有人能告诉我正确的方法 public class TestController : Controller { private readonly DatabaseContext context; p

如果有一个控制器接收并处理用户选择的操作,然后希望使用另一个控制器存储所有与数据库相关的逻辑,那么在允许第二个控制器与数据库上下文交互的同时,连接这些控制器的正确方法是什么

目前,我正在第一个控制器中创建一个数据库上下文,然后在使用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;
        }

    }
}
startup.cs

  services.AddDbContext<DatabaseContext>
            (options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDbContext
(options=>options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”));
数据库上下文

 public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions<DatabaseContext> options)
       : base(options)
    { }
    public DbSet<DatabaseModels.UserModel> Users { get; set; }
}
公共类数据库上下文:DbContext
{
公共数据库上下文(DbContextOptions)
:基本(选项)
{ }
公共数据库集用户{get;set;}
}

正确的方法是:你不需要。控制器不应直接调用另一个控制器。您可以重定向到映射到其他控制器的新路由,但仅此而已。如果您有一些需要共享的通用逻辑,那么应该将其分解为两个控制器都可以使用的完全不同的类。

正确的方法是:您不需要。控制器不应直接调用另一个控制器。您可以重定向到映射到其他控制器的新路由,但仅此而已。如果您有一些需要共享的公共逻辑,那么应该将其分解为两个控制器都可以使用的完全不同的类。

如果您发现需要从另一个控制器调用控制器方法,则可能需要重构代码。控制器中应该包含很少的逻辑,这通常只涉及调用服务层,然后从数据构建ViewModel


我的建议是阅读和(有时称为管理器模式)。

如果您发现需要从另一个控制器调用控制器方法,您可能需要重构代码。控制器中应该包含很少的逻辑,这通常只涉及调用服务层,然后从数据构建ViewModel


我的建议是阅读和(有时称为管理模式)。

嗨,我认为最好的方法是使用一个单独的层进行数据相关操作。嗨,我认为最好的方法是为数据相关的操作使用一个单独的层。例如,如果我有一个类来保存我对表用户的所有数据库调用,然后尝试在各种控制器中使用这些用户方法,是否每次都必须将数据库上下文解析到此类?例如,如果我有一个类,该类包含我对表用户的所有数据库调用,然后尝试在各种控制器中使用这些用户方法,那么每次都必须将数据库上下文解析到此类?