.Net Core(三)MVC Core
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
.Net Core(三)MVC Core的更多相关文章
- MVC Core 网站开发(Ninesky) 1、创建项目
		
又要开一个新项目了!说来惭愧,以前的东西每次都没写完,不是不想写完,主要是我每次看到新技术出来我都想尝试一下,看到.Net Core 手又痒了,开始学MVC Core. MVC Core最吸引我的有三 ...
 - ASP.NET Core - ASP.NET Core MVC 的功能划分
		
概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...
 - [.Net Core] 在 Mvc 中简单使用日志组件
		
在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 Hom ...
 - 【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!
		
移动端支持 虽然 FineUIPro 早在 2016 年就已经完成对移动端的适配工作,并新增了 50 多个官网示例. 并且,我们也新增了一个移动端的首页 http://pro.fineui.com/m ...
 - 简述C#中IO的应用  RabbitMQ安装笔记  一次线上问题引发的对于C#中相等判断的思考  ef和mysql使用(一)  ASP.NET/MVC/Core的HTTP请求流程
		
简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...
 - ASP.NET MVC Core的TagHelper (高级特性)
		
这篇博文ASP.NET MVC Core的TagHelper(基础篇)介绍了TagHelper的基本概念和创建自定义TagHelper的方式,接着继续介绍一些新的看起来比较高级的特性.(示例代码紧接着 ...
 - ASP.NET MVC Core的ViewComponent
		
MVC Core新增了ViewComponent的概念,直接强行理解为视图组件,用于在页面上显示可重用的内容,这部分内容包括逻辑和展示内容,而且定义为组件那么其必定是可以独立存在并且是高度可重用的. ...
 - FineUIPro/Mvc/Core v6.1.0 发布了!
		
FineUIPro/Mvc/Core v6.1.0 正式发布了(2019-12-25),这个版本主要是BUG修正,并增加了一些新特性,建议升级到此版本. 在列举新版本特性之前,我们先来回顾下每次发布大 ...
 - 基于ASP.NET core的MVC站点开发笔记 0x01
		
基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...
 
随机推荐
- 我自己的sublime3环境
			
概述 我本来一直用的别人自带的破解版sublime3,自带插件. 前几天看<程序员修炼之道>,其中谈到了最好精通一种编辑器,我觉得说的很有道理,于是重新下了最新版的sublime3,一步步 ...
 - Qt之实现网络下发配置的半透明友好提示界面
			
一.说明 在使用Qt开发的网管客户端程序中,网管客户端主要负责显示设备信息以及对设备下发配置信息等,如配置设备名字.更新设备程序等:由于在网管客户端程序的操作要先经过服务器处理,再由服务器将该命令转发 ...
 - Linux - 执行命令与脚本
			
001 - Linux执行多条命令 方法1:在命令行下可以一次性粘贴多条语句,shell会依次执行并输出结果 方法2:在一个命令行中,用分号将各个命令隔开或者使用&&连接各个命令 示例 ...
 - cracking the coding interview系列C#实现
			
原版内容转自:CTCI面试系列——谷歌面试官经典作品 | 快课网 此系列为C#实现版本 谷歌面试官经典作品(CTCI)目录 1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除 ...
 - Win10手记-为应用集成SQLite(一)
			
SQLite是什么?熟悉移动端开发的朋友都会经常接触,无论是iOS的CoreData还是安卓的内置数据库,他们都是采用了SQLite这个轻量高效数据库,微信也是如此.可以说SQLite是目前移动端最为 ...
 - 一些oracle的经验
			
注:再写存储过程的时候,在for循环里要写begin和end,这样就可以写exception ,让这条错误数据回滚,然后记录错误日志,commit 关键字: oracle 存储过程 1.基本结构 CR ...
 - mysql 开发进阶篇系列 37 工具篇 perror (错误代码查看工具)与总结
			
一. perror 错误代码查看工具 在mysql 的使用过程中,可能会出现各种各样的error.这些error有些是由于操作系统引起的,比如文件或者目录不存在等等,使用perror的作用就是解 ...
 - mybatis--Mapper 常见报错总结(持续总结)
			
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 1.The content of elements must consist of well-f ...
 - SQL 必知必会·笔记<2>检索和排序数据
			
1.检索数据 使用SELECT 检索表数据,必须至少给出两条信息——想选择什么, 以及从什么地方选择. 检索不同的值 使用DISTINCT关键字,检索不同的值,使用示例: SELECT DISTINC ...
 - 可重入锁 & 不可重入锁
			
可重入锁指同一个线程可以再次获得之前已经获得的锁,避免产生死锁. Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock. ...