在MVC 3中,我了解您可以创建自定义WebViewPages。你能使用构造函数注入通过IOC容器注入依赖项吗?
答案 0 :(得分:10)
Brad Wilson http://bradwilson.typepad.com/blog/2010/07/service-location-pt3-views.html
在博文中有一个关于视图注入的示例其他视图允许构造函数注入不完全正确的语句。是IDependencyResolver
可以创建具有构造函数参数的视图。但除非你实现自己的视图引擎,否则这对你没有任何帮助。像razor这样的现有视图引擎将要求您具有无参数构造函数。这意味着您只能使用它们对视图进行属性注入。
但正如其他人所说,无论如何你都不应该观看注射。您的视图应该是愚蠢的,只需将视图模型呈现为HTML。任何需要依赖的事情都应该在控制器或服务中完成。
答案 1 :(得分:8)
无法执行构造函数注入。但是你可以用Ninject做这样的事情:
public abstract class CustomViewBase<TModel> : WebViewPage<TModel> where TModel : class { [Inject] public IFace Face { get; set; } }
假设您已在Global.asax中设置了IDependencyResolver,则应正确初始化@Face属性。 但一个重要的警告:您可能无法在_Layout.cshtml中访问@Face,因为(根据Brad Wilson)布局在MVC之外工作,当您尝试在布局中访问它时@Face将为null页。
无论如何,我同意其他人的意见,认为不应该处理任何复杂的逻辑。
答案 2 :(得分:5)
是的,这是可能的,但我认为这不是一个好主意。为什么在视图级别需要一些“服务”?记住关键的MVC指南 - 视图必须是愚蠢的。事实上,它应该只是用于将视图模型对象转换为HTML的某种模板,仅此而已。