博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Core(三)MVC Core
阅读量:6204 次
发布时间:2019-06-21

本文共 1537 字,大约阅读时间需要 5 分钟。

hot3.png

0?wx_fmt=jpeg

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

转载于:https://my.oschina.net/u/2327858/blog/1532158

你可能感兴趣的文章
java每日小算法(10)
查看>>
Yeslab现任明教教主ISE课程前七部分免费发布
查看>>
我的友情链接
查看>>
基本概念-数据类型
查看>>
LVS负载均衡(3)——LVS工作模式与工作原理
查看>>
多语言版希尔排序
查看>>
运维人,你应该了解的三张武功心法图(转载)
查看>>
linux下恢复误删文件
查看>>
Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...
查看>>
RAID的肤浅认识
查看>>
DWT算法
查看>>
linux新起之秀-linux文件属性
查看>>
Python学习笔记(二)
查看>>
如何用组策略来找到丢失的文件
查看>>
使用Apache Tomcat Maven插件部署运行 Web 项目
查看>>
centos关于”running yum-complete-transaction first...
查看>>
poxtfix+dovecot+saslauthd+courier-authlib +mysql + extmail 完整虚拟邮箱系统部署
查看>>
我的友情链接
查看>>
spark内核揭秘-02-spark集群概览
查看>>
《C语言深度剖析》学习笔记三
查看>>