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的更多相关文章

  1. MVC Core 网站开发(Ninesky) 1、创建项目

    又要开一个新项目了!说来惭愧,以前的东西每次都没写完,不是不想写完,主要是我每次看到新技术出来我都想尝试一下,看到.Net Core 手又痒了,开始学MVC Core. MVC Core最吸引我的有三 ...

  2. ASP.NET Core - ASP.NET Core MVC 的功能划分

    概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...

  3. [.Net Core] 在 Mvc 中简单使用日志组件

    在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 Hom ...

  4. 【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!

    移动端支持 虽然 FineUIPro 早在 2016 年就已经完成对移动端的适配工作,并新增了 50 多个官网示例. 并且,我们也新增了一个移动端的首页 http://pro.fineui.com/m ...

  5. 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程

    简述C#中IO的应用   在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...

  6. ASP.NET MVC Core的TagHelper (高级特性)

    这篇博文ASP.NET MVC Core的TagHelper(基础篇)介绍了TagHelper的基本概念和创建自定义TagHelper的方式,接着继续介绍一些新的看起来比较高级的特性.(示例代码紧接着 ...

  7. ASP.NET MVC Core的ViewComponent

    MVC Core新增了ViewComponent的概念,直接强行理解为视图组件,用于在页面上显示可重用的内容,这部分内容包括逻辑和展示内容,而且定义为组件那么其必定是可以独立存在并且是高度可重用的. ...

  8. FineUIPro/Mvc/Core v6.1.0 发布了!

    FineUIPro/Mvc/Core v6.1.0 正式发布了(2019-12-25),这个版本主要是BUG修正,并增加了一些新特性,建议升级到此版本. 在列举新版本特性之前,我们先来回顾下每次发布大 ...

  9. 基于ASP.NET core的MVC站点开发笔记 0x01

    基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...

随机推荐

  1. 正确使用AES对称加密

    正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...

  2. 【Object类、常用API】

    Object类 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类 ...

  3. Ubuntu16.04安装Anaconda (转)

    一. Anaconda下载 Anaconda 官方下载链接: https://www.continuum.io/downloads 根据自己的系统选择下载32位还是64位.   二. 进入下载目录 如 ...

  4. 从 Secure Element 到 Android KeyStore

    忽如一夜春风来,智能手机来到每个人的手上,我们用它支付.理财.娱乐.工作.记录生活.存储私密信息.乘坐公共交通.开启家门.控制汽车....智能手机是如此的重要,不知天天把它拿在手上的你,是否关心过它是 ...

  5. Python获取网页指定内容(BeautifulSoup工具的使用方法)

    Python用做数据处理还是相当不错的,如果你想要做爬虫,Python是很好的选择,它有很多已经写好的类包,只要调用,即可完成很多复杂的功能,此文中所有的功能都是基于BeautifulSoup这个包. ...

  6. docker+nginx实现负载均衡

    配置nginx配置文件(配置文件运行时是会加载到docker进程中)先建立nginx相关文件和目录,对应下面启动命令中的挂载位置,把主配置文件nginx.conf放到对应位置“/etc/docker/ ...

  7. 全网最详细的实用的搜索工具Listary和Everything对比的区别【堪称比Everything要好】(图文详解)

    不多说,直接上干货! 引言 无论是工作还是科研,我们都希望工作既快又好,然而大多数时候却迷失在繁杂的重复劳动中,久久无法摆脱繁杂的事情.   你是不是曾有这样一种想法:如果我有哆啦A梦的口袋,只要拿出 ...

  8. maven多环境参数配置

    maven中properties加载顺序 <build><filters></filters></build>中的配置 pom.xml中的<pro ...

  9. [Mysql]——通过例子理解事务的4种隔离级别

    SQL标准定义了4种隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的. 低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. 首先,我们使用 test 数据库, ...

  10. #2 安装Python

    上一篇文章主要记录 了Python简介,相信你已经爱上了小P,俗话说的好:公欲善其事,必先利其器,所以本文将带领你安装Python3! Windows平台 1.确认Windows位数: 鼠标右击此电脑 ...