在我的控制器中,我想设置以下服务:
private IAccountService _accountService;
private IDataSourceService _dataSourceService;
private IProductService _productService;
private ISequenceService _sequenceService;
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
}
但是,设置它们需要我知道模型中属性的值来自视图并指定dataSourceID。
在控制器的Initialize方法中,模型信息是否可用?如果答案是否定的,我可以查看会话变量吗?
答案 0 :(得分:0)
不要破解MVC框架的内部工作。在我看来,你想要做的事实上是控制反转,或依赖注入。它在MVC中得到很好的支持,你只需要让你的控制器的构造函数接受这些服务(作为接口)并设置IoC容器(MVC3内置的DependencyResolver与所有主要的IoC容器兼容 - 我个人喜欢Ninject)。有很多这方面的教程,例如Ninject可以通过nuget完全自动设置。
答案 1 :(得分:0)
我不确定你为什么要那样做。控制器不应该负责配置它的依赖性。您应该使用Inversion of Control(也就是依赖注入)容器来在构造函数中注入所有依赖项。
如果您的服务需要有关构造的特定模型信息,我强烈建议您查看您的体系结构,因为情况并非如此。最有可能的方法是在方法调用(方法注入)中传递该信息或将依赖项抽象为服务。
如果您需要存储在会话中的信息,您还可以考虑将会话包装在服务中。然后,您可以将会话服务作为依赖项注入。这也使得对控制器进行单元测试变得更加容易。