.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

时间: 2024-12-18 01:17:37

.Net Core(三)MVC Core的相关文章

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

又要开一个新项目了!说来惭愧,以前的东西每次都没写完,不是不想写完,主要是我每次看到新技术出来我都想尝试一下,看到.Net Core 手又痒了,开始学MVC Core. MVC Core最吸引我的有三点: 跨平台:windows和linux都可以用,以后没必要让客服非得用windows服务器了 多数据库支持:这个是Entity framework Core的功能,提供SQL Server.SQlite.PostgreSQL,MySQL等多种数据库支持,在linux下用.Net MVC再也不用担心

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

这篇博文ASP.NET MVC Core的TagHelper(基础篇)介绍了TagHelper的基本概念和创建自定义TagHelper的方式,接着继续介绍一些新的看起来比较高级的特性.(示例代码紧接着上一遍博文) 一.使用自定义的标记元素 之前基础篇介绍的TagHelper的功能是给已有的HTML元素提供一个自定义的属性标记,然后服务器认出这个标记后,将标记转化成最终的HTML.这里将要介绍的功能是,定义个全新的Tag,看起来跟普通的HTML元素一样.是不是觉得很熟悉呢(前提是你用过Angula

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

概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时跟进不断增长的应用程序. Model-View-Controller (MVC) 模式相当成熟,即使在 Microsoft ASP.NET 空间中亦是如此.第一版 ASP.NET MVC 在 2009 年推出,并且在今年夏初全面启动了 ASP.NET Core MVC 平台.至今,随着 ASP.NE

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

在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 HomeController.cs 进行演示. 需要 using Microsoft.Extensions.Logging; 方案一: public class HomeController : Controller { private readonly ILogger _logger ; public

ASP.NET MVC Core Starter Kit

上一篇博文<创建.NET Core程序的Nuget Package>提到准备创建一个Nuget包,用于自动生成一个简单的ASP.NET MVC Core的示例项目.本来是打算用Nuget实现的,但是后来发现Nuget使用.NET Core的Nuget包时,没法自动引入Content目录,官方文档也表示正在进行开发中,所以就放弃了这个实现方式. 不能用Nuget包实现,于是就采用了Project Template的方式实现,实现过程反而更加简单快捷,具体过程不详细说明,简单的说一下 1 首先创建

(4) Mvc Core IOC

asp.net mvc core 内置了 IOC 容器,不再需要 autofac 等,当然 autofac 也是支持.net core的(http://www.open-open.com/lib/view/open1454127071933.html).内置 IOC 是通过构造函数注入,而不是属性注入. 内置的 IOC 有三种生命周期:Transient: Transient 服务在每次被请求时都会被创建.这种生命周期比较适用于轻量级的无状态服务.Scoped: Scoped 生命周期的服务是每

Core开发-MVC 使用dotnet 命令创建Controller和View

NET Core开发-MVC 使用dotnet 命令创建Controller和View 使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使用yo 来创建Controller和View. 下面来了解dotnet 命令来创建Controller和View,功能更加强大,更加完整. 结合VS Code 使你能跨平台更好更快速的开发 ASP.NET Core MVC. 也就可以在 Linux 和Mac 中更好的开发ASP.NET Core 应用程

ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将改名为 Entity Framework Core 1.0 .NET新的跨平台版本将命名为.NET Core 1.0 新版本的ASP.NET和Entity Framework有一个严重的问题,就是它们同以前的版本不兼容.这不只是行为或API稍有差异的事,而基本上是进行了完全的重写,去掉了大量的功能.

ASp.Net Mvc Core 重定向

在之前老版本的MVC中.重定向直接写 HttpContext.Response.Redirect("/404.html") 就好了,程序走到这里会自动返回302然后跳转了, 但是这句话在MVC Core中好像没有效果了... 必须在Action中返回一个Redirect return Redirect("/404.html"); 然后这样才会被正确的重定向. 原文地址:https://www.cnblogs.com/chenxincoder/p/9309437.ht