ASP.NET Core 支持在试图中使用依赖注入。这将有助于提供视图专用的服务,好比本地化或者仅用于填充视图元素的数据。应尽可能保持控制器和视图之间的关注点分离。视图所显示的大部分数据应该从控制器传入。spa
使用 @inject 指令将服务注入到视图,语法 @inject <type> <name>,例如:code
@model MVCTest.Models.Operation @using MVCTest.Services @inject BaseInfoServices BaseInfoServices @{ ViewData["Title"] = "Create"; } <ul> @foreach (var city in BaseInfoServices.GetCities()) { <li>@city</li> } </ul>
public class BaseInfoServices { public List<string> GetCities() { return new List<string>(); } }
须要提早在 ConfigureServices 中配置,将该服务加入到容器。blog
1.填充查找数据继承
视图注入有助于填充 UI 元素,例以下拉框列表。好比一个包括性别,州以及其余用户资料的表单。若是经过标准的 MVC 方式渲染这个表单,则须要控制器为每一组选项都请求数据访问服务,而后将每一组绑定的选项填充到模型或ViewBag中。ci
另外一种则是直接将服务注入到视图中以获取这些选项数据。这种方法将控制器代码量减小到最少,把构造视图元素的逻辑移到视图自己去。控制器 Action 只需把用户资料数据传个表单便可。string
2.重写服务it
除了注入服务外,此技术还可用于重写页面上先前注入的服务。例如,替换默认的HTML Helper:io
@model MVCTest.Models.Operation
@using MVCTest.Services
@inject BaseInfoServices BaseInfoServices
@inject MyHtmlHelper Html
在视图中使用 @Html 将会调用自定义的服务。class
若是想要扩展示有服务而不是替换,则只需在使用此技术的同时,让服务继承或者封装已有实现便可。容器