Правильный способ подключения контроллеров с помощью Dependency Injection - PullRequest
0 голосов
/ 08 апреля 2019

Если у меня есть контроллер, который получает и обрабатывает действие, выбранное пользователем, а затем хочет использовать другой контроллер для хранения всей логики, связанной с базой данных, как правильно подключить эти контроллеры, одновременно позволяя второму контроллеру взаимодействовать сконтекст базы данных.

В данный момент у меня есть работа с созданием контекста базы данных в первом контроллере и последующим синтаксическим анализом его с контроллером базы данных, когда я соединяю два с помощью 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")));

databasecontext

 public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions<DatabaseContext> options)
       : base(options)
    { }
    public DbSet<DatabaseModels.UserModel> Users { get; set; }
}

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Если вы обнаружите, что вам нужно вызывать методы Controller из другого Controller, вам, вероятно, нужно реорганизовать ваш код. Контроллеры должны иметь очень мало логики, что обычно включает вызов уровня Service и затем создание ViewModel из данных.

Мой совет - прочитать шаблон Service Layer и Repository pattern (иногда его называют шаблоном Manager).

1 голос
/ 08 апреля 2019

«Правильный» путь: вы этого не делаете. Контроллер никогда не должен напрямую вызывать другой контроллер. Вы можете перенаправить на новый маршрут, который отображается на другой контроллер, но это все. Если у вас есть какая-то общая логика, которой нужно делиться, то она должна быть выделена в совершенно другой класс, который могут использовать оба контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...