Я хочу вызвать метод на другом контроллере. Проблема в том, что в моем проекте все контроллеры создаются с использованием замка Виндзор и замка Виндзор, разрешающего зависимости. Это означает, что я не могу создать экземпляр контроллера, используя новый, поскольку тогда ему нужны его иждивенцы. Как спросить MVC создать экземпляр контроллера, а затем вызвать метод на нем (который возвращает объект)?вызов метода на контроллере с другого контроллера в mvc
ответ
Я собираюсь рассказать вам две вещи: 1) Во-первых, я покажу вам, как вы, скорее всего, сможете выполнить то, что хотите, и 2) Затем я буду рекомендовать вам достичь своей цели в другой способ:
1: При использовании автоматической проводки способ получить материал из контейнера - объявить зависимость, добавив ее в качестве аргумента конструктора - например, (Предполагается, что контейнер знает, как решить контроллеры от их конкретных типов):
public class HomeController
{
readonly AccountController accountController;
public HomeController(AccountController accountController)
{
this.accountController = accountController;
}
}
Это, скорее всего, позволит вам делать то, что вы хотите с AccountController
из жгутов HomeController
. Однако это не очень красиво.
2: Ввод одного контроллера в другой, вероятно, не то, что вы (действительно) хотите. Я предполагаю, что вы действительно хотите переместить любую логику, которая у вас есть в методе действия вашего контроллера, в выделенный сервис, например. DoSomethingInteresting
, который реализует IDoStuff
, а затем пусть оба ваших контроллера зависят от IDoStuff
. Это имеет смысл для вас?
у вас есть код, который вы можете разместить, чтобы мы могли лучше понять ваш подход? –