2012-02-16 2 views
0

Я хочу вызвать метод на другом контроллере. Проблема в том, что в моем проекте все контроллеры создаются с использованием замка Виндзор и замка Виндзор, разрешающего зависимости. Это означает, что я не могу создать экземпляр контроллера, используя новый, поскольку тогда ему нужны его иждивенцы. Как спросить MVC создать экземпляр контроллера, а затем вызвать метод на нем (который возвращает объект)?вызов метода на контроллере с другого контроллера в mvc

+0

у вас есть код, который вы можете разместить, чтобы мы могли лучше понять ваш подход? –

ответ

0

Я собираюсь рассказать вам две вещи: 1) Во-первых, я покажу вам, как вы, скорее всего, сможете выполнить то, что хотите, и 2) Затем я буду рекомендовать вам достичь своей цели в другой способ:

1: При использовании автоматической проводки способ получить материал из контейнера - объявить зависимость, добавив ее в качестве аргумента конструктора - например, (Предполагается, что контейнер знает, как решить контроллеры от их конкретных типов):

public class HomeController 
{ 
    readonly AccountController accountController; 

    public HomeController(AccountController accountController) 
    { 
     this.accountController = accountController; 
    } 
} 

Это, скорее всего, позволит вам делать то, что вы хотите с AccountController из жгутов HomeController. Однако это не очень красиво.

2: Ввод одного контроллера в другой, вероятно, не то, что вы (действительно) хотите. Я предполагаю, что вы действительно хотите переместить любую логику, которая у вас есть в методе действия вашего контроллера, в выделенный сервис, например. DoSomethingInteresting, который реализует IDoStuff, а затем пусть оба ваших контроллера зависят от IDoStuff. Это имеет смысл для вас?