38-依赖注入inject
ASP.NET Core 支持在视图中使用依赖注入。使用 @inject 把服务注入到视图中:@inject 类型 名称,如 @inject。
定义一个被调用的类:
public class PhoneHelper
{
public string ExecuteMethod()
{
return "FoxDevelop.com";
}
}Code language: PHP (php)
以前使用它需要 new:
var phone = new PhoneHelper();Code language: JavaScript (javascript)
在 Startup 中添加注入项,把 PhoneHelper 加入到依赖注入容器里面:
public void ConfigureServices(IServiceCollection services)
{
//services.AddMvc();
services.AddMvc(options => {
options.Filters.Add(new MyActionFilter());
}); //在service服务里面 注入我们的过滤器
//添加依赖注入项
services.AddTransient<PhoneHelper>();
}Code language: JavaScript (javascript)
视图中可以直接使用:
@inject PhoneHelper phoneHelperCode language: CSS (css)
然后就可以调用:
@phoneHelper.ExecuteMethod()Code language: CSS (css)
39-Controller中使用依赖注入
控制器应通过它们的构造器明确地请求它们的依赖关系(构造函数注入)。
比如现在创建一个接口类:
public interface IDateTime
{
DateTime Now { get; }
}Code language: PHP (php)
创建一个实现了这个接口的类:
public class ChinaDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
假设我们在控制器里面需要使用 ChinaDateTime(其实一般我们的控制器需要用到的是数据库上下文、帮助类、缓存等等,比如 Memcache)。
在控制器的构造函数里面:
private IDateTime dateTime;
public HomeController(IDateTime dateTime)
{
this.dateTime = dateTime;
}Code language: PHP (php)
谁调用控制器的构造函数?谁给我传呢?—— MVC 底层。
注入依赖关系:
public void ConfigureServices(IServiceCollection services)
{
//services.AddMvc();
services.AddMvc(options => {
options.Filters.Add(new MyActionFilter());
}); //在service服务里面 注入我们的过滤器
//添加依赖注入项
services.AddTransient<PhoneHelper>();
services.AddTransient<IDateTime, ChinaDateTime>();
}Code language: JavaScript (javascript)
使用 DateTime 对象:
ViewBag.Title = "首页" + dateTime.Now.ToString();Code language: JavaScript (javascript)
40-区域
区域是在一个 MVC 项目中有一个相对独立的子 MVC 模块,拥有独立命名空间、独立的文件夹结构,也有一套 Model、View、Controller,还需要路由规则。这样我们可以把一些多业务的系统分离出来,比如把搜索功能、用户管理、后台管理等独立出来作为一个区域。
右击项目,添加一个区域,名称 Search,然后添加控制器和视图。
需要在 Startup 里面注册:
app.UseMvc(routes =>
{
routes.MapAreaRoute("search", "Search", "search/{controller=Default}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});Code language: JavaScript (javascript)
访问地址:http://localhost:5630/search/default/index
Previous: 视图和过滤器