Fel*_*ani 6 clr roslyn asp.net-core-mvc visual-studio-2015
我开始从asp.net mvc(6/vnext)学习内部,我有很多问题,但我想在这里保留一个.我正在使用Visual Studio 2015预览版,我在asp.net mvc 6(或vNext)中看到了一个新功能,即控制器不需要从Controller基类继承.我在asp.net MVC 4/5 Controller类(或其抽象)看见具有用于像资源的属性TempData,ViewData,ViewBag和方法一样View(),Json(),File()等.
现在,在新版本中,我们不需要从Controller基类继承.所以,我的问题是,当控制器不从Controller类继承时,asp.net mvc如何知道要添加哪些资源?我看到我们可以添加一个属性,它将在运行时解析但是如何在asp.net核心中完成?是否有一个IoC在asp.net核心内工作来解决它?
MVC 6基于公共类型并以后缀结尾来定位控制器Controller.现实比这更复杂,并且它也可以自定义以支持其他约定,但这是它的本质.
除此之外,MVC 6还有一个系统可以用所需数据"保湿"控制器(以及视图和其他特定类型).这主要是通过[Activate]告诉MVC调用依赖注入系统来填充类实例的依赖关系的属性来完成的.您甚至可以在内置Controller基类中看到如何完成此操作:
namespace Microsoft.AspNet.Mvc
{
public class Controller : ...
{
...
[Activate]
public ActionContext ActionContext { get; set; }
[Activate]
public IUrlHelper Url { get; set; }
[Activate]
public IActionBindingContextProvider BindingContextProvider { get; set; }
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是由DefaultControllerFactory这里触发的:
_controllerActivator.Activate(controller, actionContext);
Run Code Online (Sandbox Code Playgroud)
并且它使用a IControllerActivator,特别DefaultControllerActivator是扫描[Activate]属性并为属性赋值:
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |