文档章节

.Net Core(三)MVC Core

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

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
博文 101
码字总数 82518
作品 0
西安
私信 提问
ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门

一、前言 1、本教程主要内容 ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MVC 视图(Razor)ViewBag使用示例 ASP.NET Core NVC 视图(Ra...

ken的杂谈
2018/11/09
0
0
ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

一、前言 1、本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET Core MVC控制器操作简介返回类型示例 ASP.NE...

ken的杂谈
2018/10/12
0
0
ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门

一、前言 1、本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NET Core MVC正则表达式匹配路由示例 ASP....

ken的杂谈
2018/09/26
0
0
Go vs .NET Core 2.1

.NET Core 2.1 正式发布之际,微软团队在博客的中提到了 .NET Core 2.1 中的性能提升。这让我想起了去年 Go 语言 Iris MVC 框架作者做的 Go 与 .NET Core 2.0 之间的性能对比(具体可看https...

dotNET跨平台
2018/08/01
0
0
ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

一、前言 1、本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 使用Visual Studio Code开发基于解决方案(sln+csproj)的项目 Visual Studio Code Solution插件( vscode-s...

ken的杂谈
2018/09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
22分钟前
2
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
40分钟前
2
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
40分钟前
1
0
oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
54分钟前
1
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部