来吧学学.Net Core之项目文件简介及配置文件与IOC的使用

序言

在当前编程语言蓬勃发展与竞争的时期,对于我们.net从业者来说,.Net Core是风头正紧,势不可挡的.芸芸口水之中,不学习使用Core,你的圈内处境或许会渐渐的被边缘化.所以我们还是抽出一点点时间学学.net core吧.

那VS Code 可以编写,也可以调试Core本人也尝试啦下,但是感觉扯淡的有点多,还是使用宇宙第一开发工具VS2017吧.

由于本篇是core的开篇,所以就稍微啰嗦一点,从创建web项目开始,先说项目文件,再来说一说配置文件与IOC使用.

创建web项目及项目文件简介

关于web项目的创建,如果你创建不出来,自生自灭吧.点击右上角的x,拜拜.

从上往下说这个目录结构

1、launchSettings.json 启动配置文件,文件默认内容如下.

{  "iisSettings": {      //使用IIS Express启动"windowsAuthentication": false,  //是否启用windows身份验证  "anonymousAuthentication": true,  //是否启用匿名身份验证"iisExpress": {      "applicationUrl": "http://localhost:57566/",   //访问域名,端口"sslPort": 0}},  "profiles": {    "IIS Express": {      "commandName": "IISExpress",      "launchBrowser": true,      "environmentVariables": {        "ASPNETCORE_ENVIRONMENT": "Production"  //环境变量,默认为开发环境(Development),预发布环境(Staging),生产环境(Production)      }},    "WebApplication1": {          //选择本地自宿主启动,详见Program.cs文件。删除该节点也将导致Visual Studio启动选项缺失"commandName": "Project",      "launchBrowser": true,      "environmentVariables": {        "ASPNETCORE_ENVIRONMENT": "Development"},      "applicationUrl": "http://localhost:57567"    //本地自宿主端口    }}
}

在vs的设计视图中也可以编辑,如下图,自己扣索下.

2、wwwroot和bower.json 静态资源文件夹与引入静态资源库包版本配置文件,自己打开看下

3、依赖项,这个里面有4种吧,一种是bower前端资源库,Nuget第三方,SDK,项目本身

4、Controllers,Views,这个不用介绍吧,mvc的2主.

5、appsettings.json :应用配置文件,类似于.net framework中的web.config文件

6、bundleconfig.json:打包压缩配置文件

7、Program.cs:里面包含一个静态Main文件,为程序运行的入口点

8、Startup.cs:这个默认为程序启动的默认类.

这里的配置文件与2个入口类文件是万物的根基,灵活多变,其中用我们值得学习了解的东西很多,这一章我不做阐述,后续章节再来补习功课,见谅,谨记.

.Net Core读取配置文件

这个是我第一次入手学习core时候的疑问,我先是按照.Net Framework的方法来读取配置文件,发现Core中根本没有System.Configuration.dll.那怎么读取配置文件呢?

那么如果要读取配置文件中的数据,首先要加载Microsoft.Extensions.Configuration这个类库.

首先看下我的默认配置文件,appsettings.json

{  "Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Warning"}}  
}

读取他的第一种方式

        /// <summary>/// 获取配置节点对象        /// </summary>   public static T GetSetting<T>(string key, string fileName = "appsettings.json") where T : class, new(){IConfiguration config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).Add(new JsonConfigurationSource { Path = fileName, Optional = false, ReloadOnChange = true }).Build();            var appconfig = new ServiceCollection().AddOptions().Configure<T>(config.GetSection(key)).BuildServiceProvider().GetService<IOptions<T>>().Value;            return appconfig;}
    public class Logging{        public bool IncludeScopes { get; set; }        public LogLevel LogLevel { get; set; }}    public class LogLevel{        public String Default { get; set; }}
var result =GetSetting<Logging>("Logging");

这样即可,读取到配置文件的内容,并填充配置文件对应的对象Logging.

如果你有自定义的节点,如下

{  "Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Warning"}},  "Cad": {    "a": false,    "b": "18512312"    }  
}

与上面一样,首先定义对应的对象

    public class Cad{      
     
public bool a { get; set; }  
     
public string b { get; set; }}
var result = GetSetting<Cad>("Cad");

有啦上面的方法很是简单,还有一种情况是你想有自己的配置文件myconfig.json,那也很简单,把上述方法的默认文件名改为myconfig.json即可!

除啦这个方法可以获取配置文件外,core在mvc中还有另外获取配置文件的方法,如下.

        IOptions<Cad> cadConfig;      
       
public HomeController(IOptions<Cad> config){cadConfig = config;}      

       
public IActionResult Index(){        
          
try{                var result = cadConfig.Value;                return View(result);}            catch (Exception ex){                return View(ex);}}

就这样,用法也很简单.

但是如果配置文件中有的配置项需要你动态修改,怎么办呢,用下面的方法试试.

        /// <summary>/// 设置并获取配置节点对象        /// </summary>  public static T SetConfig<T>(string key, Action<T> action, string fileName = "appsettings.json") where T : class, new(){IConfiguration config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(fileName, optional: true, reloadOnChange: true).Build();            var appconfig = new ServiceCollection().AddOptions().Configure<T>(config.GetSection(key)).Configure<T>(action).BuildServiceProvider().GetService<IOptions<T>>().Value;      
           
return appconfig;}
  var c =SetConfig<Cad>("Cad", (p => p.b = "123"));

ok啦,自己试试吧,对配置文件的读取,我这里目前只做到这里,后续有新的好方法再来分享.

.Net Core中运用IOC

当然在.net framework下能够做依赖注入的第三方类库很多,我们对此也了然于心,但是在core中无须引入第三放类库即可做到.

    public interface IAmount{       
 
string GetMyBanlance();    
    
string GetMyAccountNo();}  

  
public class AmountImp: IAmount{    
       
public string GetMyBanlance(){            return "88.88";}        public string GetMyAccountNo(){            return "CN0000000001";}}

上面一个接口,一个实现,下面我们在Startup的ConfigureServices中把接口的具体实现注册到ioc容器中.

 public class Startup{       // This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddScoped<IAmount, AmountImp>();            // Add framework services.            services.AddMvc();}}


    public class HomeController : Controller{IAmount amount;      
       
public HomeController(IAmount _amount){amount = _amount;}      
       
public IActionResult Index(){        
          
try{          
var result = amount.GetMyAccountNo(); //结果为: "CN0000000001"return View();}            catch (Exception ex){                return View(ex);}}
   }

这里呢,我只做一个简单的示例,以供我们熟悉了解core,后续章节,如果运用的到会深入.

总结

入手.net core还是需要有很多新的认识点学习的,不是一两篇博文可以涵盖的,我们自己需要多总结思考学习.

这里我把一些的点,贴出来,希望对想入手core的同学有所帮助.如有志同道合者,欢迎加左上方群,一起学习进步.

原文地址:http://www.cnblogs.com/knowledgesea/p/7079880.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真正的问题应该在我身上……

渐渐地&#xff0c;学生已进入学习状态。在未测试之前&#xff0c;一直以为大家都学的很好&#xff0c;从课堂上的互动氛围就可以看得出来&#xff0c;一问问题&#xff0c;你一言他一语的……在测试之后&#xff0c;真是让我大跌眼镜&#xff0c;平时感觉表现很好的学生们&…

搞定计算机网络面试,看这篇就够了

转载自 搞定计算机网络面试&#xff0c;看这篇就够了 文章目录结构&#xff1a; 一 OSI与TCP/IP各层的结构与功能&#xff0c;都有哪些协议 运输层主要使用以下两种协议&#xff1a; UDP的主要特点&#xff1a; TCP的主要特点&#xff1a; 域名系统&#xff08;Domain Nam…

来吧学学.Net Core之登录认证与跨域资源使用

序言 学习core登录认证与跨域资源共享是越不过的砍,所以我在学习中同样也遇到啦这两个问题,今天我们就用示例来演示下使用下这2个技术点吧. 本篇主要内容如下: 1、展示一个登录认证的简单示例 2、跨域资源访问 3、跨域获取登录认证的用户信息 .Net Core使用身份认证(Auth…

ssl1760-商店选址问题【图论,最短路】

题目 给出一个城市的地图&#xff08;用邻接矩阵表示&#xff09;&#xff0c;商店设在一点&#xff0c;使各个地方到商店距离之和最短。 输入 第一行为n&#xff08;共有几个城市&#xff09;&#xff1b; N小于201 之后邻接矩阵 3 0 3 1 3 0 2 1 2 0 输出 最短路径…

JSP 获得服务器时间和浏览器时间

发布项目到服务器并访问 创建Web项目&#xff0c;开发静态页面 部署到服务器Tomcat 启动服务器Tomcat 不同用户通过浏览器来访问Web项目 Web项目和Java项目的区别 Web项目需要JavaEE的类库 Web项目中还可以存放静态网页和动态网页 开发目录和部署目录的区别 开发目录&…

如果要你选择某读书APP的图标,你会选择哪一个?

声明&#xff1a;介于尊重每位同学的劳动成果&#xff0c;故本文所有广告收入、赞赏均会均分给同学们&#xff01;最近学到了平面设计基础&#xff0c;于是让同学们用所学知识以“读书”为主题&#xff0c;原创了各式各样的图标&#xff0c;也许屏幕前的你只是轻轻的一划而过&a…

从理论知识到落地能力,你欠缺了什么?

转载自 从理论知识到落地能力&#xff0c;你欠缺了什么&#xff1f; 本文是一个理论过度到实践的典型案例&#xff0c;借助程序员经常遇到的一个问题——网络为什么不通&#xff0c;来具体说明怎么将书本上的死知识真正变成我们解决问题的能力。 大学学到的基本概念 我相信…

三大特性之多态性

1.理解多态性&#xff1a;可以理解为一个事物的多种形态。 2.何为多态性&#xff1a; 对象的多态性&#xff1a;父类的引用指向子类的对象&#xff08;或子类的对象赋给父类的引用&#xff09; 3.多态的使用&#xff1a;虚拟方法调用 有了对象的多态性以后&#xff0c;我们在编…

在这里,我们为您绘制了专属海报,请您查收!

树叶在空中飘荡&#xff0c;谱写着一曲感恩的乐章&#xff0c;那是大树对滋养它的大地的感恩;白云在蔚蓝的天空中飘荡&#xff0c;绘画着那一幅幅感人的画面&#xff0c;那是白云对哺育它的蓝天的感恩。我们沐浴着爱的阳光长大&#xff0c;我们滋润着人间的真情成长&#xff0c…

ssl1761-城市问题【图论,最短路,Dijkstra】

题目 一个图&#xff0c;输出从k点到每个点的最短路 输入 第一行有两个整数n和k&#xff0c;中间用空格隔开&#xff1b;以下是一个NxN的矩阵&#xff0c;表示点间的距离。 3 1 0 3 1 3 0 2 1 2 0 输出 输出点k到各点的距离 3 0 2 解题思路 用Dijkstra算法&#xff…

10分钟就能学会的.NET Core配置

.NET Core为我们提供了一套用于配置的API&#xff0c;它为程序提供了运行时从文件、命令行参数、环境变量等读取配置的方法。配置都是键值对的形式&#xff0c;并且支持嵌套&#xff0c;.NET Core还内建了从配置反序列化为POCO对象的支持。 目前支持以下配置Provider&#xff…

String 使用不当可能导致内存泄露

转载自 String 使用不当可能导致内存泄露 String是Java中一个比较基础的类&#xff0c;每一个开发人员都会经常接触到。而且&#xff0c;String也是面试中经常会考的知识点。String有很多方法&#xff0c;有些方法比较常用&#xff0c;有些方法不太常用。 今天介绍一个Strin…

instanceof关键字

instanceof关键字的使用 a instanceof A:判断对象a是否是类A的实例。如果是&#xff0c;返回true&#xff1b;如果不是&#xff0c;返回false。 使用情境&#xff1a;为了避免在向下转型时出现ClassCastException的异常&#xff0c;我们在向下转型之前&#xff0c;先 进行ins…

王宝兴同学谈学习!

对于学习&#xff0c;我认为心态很重要。只要我们明白就应做什么&#xff0c;此刻需要做什么&#xff0c;才能不断地向前迈进&#xff0c;直至终点。不要怕累。其实谁都一样&#xff0c;学习很累&#xff0c;可这个累只是暂时的。只要坚持下去&#xff0c;努力下去&#xff0c;…

ssl1614-医院设置【图论,最短路】

题目 一个像树一样的无向图&#xff0c;每个点有个值&#xff0c;每条边权值都是1&#xff0c;然后 若医院建在&#xff1a;   1处&#xff0c;则距离和4122*202*40136   3处&#xff0c;则距离和4*213204081 要求距离和最小 输入 第一行一个整数n&#xff0c;表示…

.NET Core运行时和基础类库性能提升

微软宣布改进了.NET Core运行时和基础类库的性能。虽然没有像改进ASP.NET Core的性能那样大肆宣传&#xff0c;但这些改进同样重要。 其中&#xff0c;以下10个方面的变化比较显著&#xff1a;集合、LINQ、压缩、加密、数学运算、序列化、文本处理、文件I/O、网络和并发。至于…

JSP 统计网站访问人数

统计访问人数1 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href"<%basePath%>…

阿里巴巴宣布开源限流降级中间件——Sentinel

转载自 阿里巴巴宣布开源限流降级中间件——Sentinel 近日&#xff0c;阿里巴巴中间件团队宣布开源 Sentinel&#xff0c;并发布了首个社区版本v0.1.0。GitHub地址为&#xff1a;https://github.com/alibaba/Sentinel 。 关于Sentinel&#xff0c;阿里巴巴给出的描述比较简单…

张君豪同学谈学习

开学也快一个月了&#xff0c;也渐渐适应了学校生活&#xff0c;与同学一起非常的开心&#xff0c;老师讲的课也听得更认真了&#xff0c;回想一下&#xff0c;过去的几周&#xff0c;还是有不少的感想啊&#xff0c;于是我就粗略的总结一下。因为某些原因&#xff0c;导致晚开…

== 和 equals() 区别

一、回顾 的使用&#xff1a;&#xff1a;运算符 1. 可以使用在基本数据类型变量和引用数据类型变量中 2. 如果比较的是基本数据类型变量&#xff1a;比较两个变量保存的数据是否相等。&#xff08;不一定类型要相同&#xff09;如果比较的是引用数据类型变量&#xff1a;比较…