文档章节

.Net Core(三)MVC Core

zhixin9001
 zhixin9001
发布于 2017/09/08 22:16
字数 506
阅读 125
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

MVC Core的改动感觉挺大的,需要的功能大多从Nuget安装,还内置了IOC,支持SelfHost方式运行等等。
 

一、项目结构的变化
创建的新MVC项目的结构发生了变化,比如:静态文件需要统一放置到wwwroot文件夹,配置文件变成了appsettings.json,用startup.cs文件代替了global文件;原先对view命名空间的引用配置在view下的web.config,现在则改成了使用_ViewImport.cshtml文件,并且用razor语法来配置。

二、内置IOC
a)Autofac是很好的IOC容器,.Net Core下也还是可以用的,同时Core也内置了IOC,typescript也自带IOC,也许注入的方式会作为语言本身的一种功能吧。
内置IOC也支持选择多种对象生命周期,比如Transient(内次请求都会实例化)、Scoped(每次Web请求)、Singleton(整个应用的生命周期)。
b)单个对象的注入只需在Startup.ConfigureServices中设置:services.AddSingleton(typeof(Person));
之后在用到Person的地方通过构造函数注入。
c)实际应用了不可能采用单个对象的注入的方式,根据程序集来配置自动注入的方式为:
var serviceAsm = Assembly.Load(new AssemblyName("2_1 MVC Core Lib"));
var serviceTypes = serviceAsm.GetTypes().Where(t => typeof(IServiceTag)
 .IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract);
foreach (var serviceType in serviceTypes) {
  var interfaceTypes = serviceType.GetInterfaces().Where(t => t.Name != "IServiceTag");
  foreach (var interfaceType in interfaceTypes) {
    services.AddSingleton(interfaceType, serviceType);
  }
}
增加t.Name != "IServiceTag"的限制是有必要的,IServiceTag是Service接口的标记,如果不增加这个判断,会将IServiceTag也注入。

d)IOC可以“递归”注入,但要保证根对象也是被IOC创建的,而不是显式new出来的。比如如果用IOC创建ExceptionFilter,那么它自身引用的其它类也可以自动注入了。手动用IOC创建nFilter并添加到MVC中的方法为:
services.AddMvc(options => {
  var serviceProvider = services.BuildServiceProvider();
  var filter = serviceProvider.GetService<ExceptionFilter>();
  options.Filters.Add(filter);
});

在前端代码中还可以用HttpContext.RequestServices.GetService来让IOC创建对象。


学习资料:如鹏网.net提高班http://www.rupeng.com/News/10/4603.shtml

© 著作权归作者所有

zhixin9001
粉丝 6
博文 134
码字总数 155232
作品 0
西安
私信 提问
加载中
请先登录后再评论。
【新特性速递】CSS3动画增强

FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对多个地方的CSS3动画进行了增强,使得用户体验更好。 1. 树控件启用EnableSingleExpand时,使得展开动画和折叠其他节点动画同步进行 FineUIPr...

三生石上(FineUI控件)
2019/12/09
0
0
MVC二:MVC与EF结合:Contoso大学

中文教程 1、通过 MVC 5 使用 Entity Framework 6 Code First 入门 https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an......

osc_t0zmqrod
2018/08/06
8
0
从零开始实现ASP.NET Core MVC的插件式开发

从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用ApplicationPart动态加载控制器和视图 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 从零开始实现ASP.NET Core ...

simadi
04/07
0
0
ASP.NET Core 2 学习笔记(九)模型绑定

原文:ASP.NET Core 2 学习笔记(九)模型绑定 ASP.NET Core MVC的Model Binding会将HTTP Request数据,以映射的方式对应到参数中。基本上跟ASP.NET MVC差不多,但能Binding的来源更多了一些。...

osc_dk3cdlqm
2018/06/19
5
0
asp.net core WebAPI学习以及 发布(***入门学习)

A asp.net Core 系列【一】——创建Web应用 asp.net Core 系列【二】—— 使用 ASP.NET Core 和 VS2017 for Windows 创建 Web API asp.net core 自定义404等友好错误页面 B asp.net core Web...

osc_r8q2esik
2019/02/27
2
0

没有更多内容

加载失败,请刷新页面

加载更多

在Ubuntu上安装PostgreSQL

PostgreSQL是一个开放源码的通用对象关系型数据库管理系统,具有许多先进的功能,可以让你构建容错环境或复杂的应用程序。 在本文中,我们将介绍如何在Ubuntu 20.04上安装PostgreSQL数据库服...

Linux就该这么学
7分钟前
12
0
变电站GPS校时产品(GPS对时设备)在线监测技术

变电站GPS校时产品(GPS对时设备)在线监测技术 变电站GPS校时产品(GPS对时设备)在线监测技术 京准电子科技技术交流VX(ahjzsz) 1 、引言 智能变电站时间同步是智能变电站运行的基本组成部...

osc_neocf7df
7分钟前
8
0
利用ffmpeg从RTSP服务器拉流并保存各种格式文件

https://www.jianshu.com/p/c8488537501b

osc_dg0eswo7
9分钟前
15
0
常用简单消费队列实现

1.场景 很多情况下要用到生产者-消费者这个模型,比如有很多任务要处理,如日志收集、邮件发送等,需采用异步进行处理。但如果生产速度大于消费速度,这个时候就需要队列的支持 和多线程处理...

黄瓜与土豆
9分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部