从mvc中的另一个控制器调用控制器上的方法

时间:2012-02-16 14:05:29

标签: model-view-controller castle-windsor

我想在另一个控制器上调用一个方法。问题是在我的项目中,所有控制器都是使用Windsor城堡创建的,Windsor城堡解决了依赖关系。这意味着我无法通过使用new来实例化控制器,因为它需要它的依赖项。如何让MVC实例化一个控制器,然后在其上调用一个方法(返回一个对象)?

1 个答案:

答案 0 :(得分:0)

我要告诉你两件事:1)首先,我会向你展示你最有可能完成你想要的东西,2)然后我会建议你在另一个目标中实现你的目标方式:)

1:使用自动布线时,从容器中获取内容的方法是通过将其作为构造函数参数添加来声明依赖关系 - 例如(假设容器知道如何根据具体类型解析控制器):

public class HomeController
{
    readonly AccountController accountController;

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

这很可能会让您通过AccountController使用HomeController执行所需操作。但是,这不是很漂亮。

2:将一个控制器注入另一个控制器可能不是你(真正)想要的。我猜你真的想要将控制器动作方法中的任何逻辑移动到专用服务中,例如DoSomethingInteresting恰好实现IDoStuff,然后让两个控制器都依赖IDoStuff。这对你有意义吗?