zoukankan      html  css  js  c++  java
  • P1 创建项目(上)




    开发的时候尽量使用VS2019

    安装的时候只需要勾选这一项就可以了

    这是安装完成之后








    项目起名叫做Three

    选择.net core这里就可以看到 ASP.NET Core 3.0了。

    如果前面选择的是.NET Framework的话,后面就看不到 .net Core 3.0了。这是因为.net Core 3.0只工作于.net Core



    Https这里 使不使用都可以

    然后就会创建项目


    这就是刚建好的项目


    首先右键项目的属性,看到Target Framework的版本是3.0

    也可以点击右键Edit Project File

    可以看到TargetFramework就是刚才我们在右键属性里面看到的东西。

    在.net core 2.x的时代,.net core项目有一个依赖的包。叫做asp.net core meta package是一个挺巨大的包,里面有asp.net core需要的基本的东西,它里面都有,
    现在 在.net Core 3.0里面,发生了一些变化。
    之前说的meta package包是没有了。现在是属于 .net core3.0的一部分。所以你装完.net core SDK以后这个包就有了。 而且只要.net core进行升级,这些包里面的东西也会跟着升级。
    3.0的依赖发生了变化。


    先看下Program里面有个Main方法,项目执行的时候就会找到这个Main方法然后执行。,net core项目本质上是一个控制台项目。
    Main方法的作用就是配置了整个asp.net core的应用,然后就运行,就是这个意思。


    争对这整个应用的配置就是通过CreateHostBuilder来进行的,它的返回类型是IHostBuilder

    CreateHostBuilder返回IHostBuilder类型之后然后执行了build方法,执行完build方法之后,这整个应用就相当于从控制台应用变成了.net core应用,

    它使用了一些默认值,所以这个方法就叫做ConfigureWebHostDefaults

    它在里面怎么配置呢,例如.net core这个应用它是如何处理这个配置文件和web应用服务器,以及路由的一些配置 等等。很多默认配置都是在这里完成的,当然我们也可以修改这些默认配置,也可以添加自己想要的配置。
    比如说默认.net core应用会加载appsetting.json这个文件作为配置文件。如果你想修改这个配置,或者是添加其他的文件作为配置文件。

    我们就可以使用webBuilder.ConfigureAppConfiguration这个方法

    webBuilder使用了Startup这么一个类文件。

    startup里面也是用来进行配置的,这里面配置相对比较动态。

    Program里面的配置就相对比较死板。

    Startup类没有实现任何的接口,也没有继承与其他任何的类,就是一个普通的C#类。运行时是通过约定来对他进行调用的。

    调用它里面两个方法,一个ConfigureService()一个是Confiure()方法。这两个方法的调用顺序就是先调用ConfigureService()然后再调用Confiure()
    ConfigureService方法主要是负责配置依赖注入相关的东西,

    依赖注入

    下面就来说一下依赖注入,.net core不可分割的一部分,依赖注入依赖IoC容器。Ioc就是控制反转,

    当我们的.net core应用启动的时候,有一些类或者是类型就会在容器里面注册。
    而这些类用典型DI术语来说,他们就叫做服务Services,这些服务注册以后,其他的一些类型,包括这些类型本身,都可以向这个IoC容器请求这些注册的服务的实例,

    而且在注册的时候,也可以请求这些注册实例的服务的生命周期是什么样的


    所以这些实例的服务的生命周期是由Ioc容器来控制的,而这些服务的对象的生命周期又分为三种,

    Transient:注册的服务的实例,在每次请求的时候都会生成一个新的实例,
    Scoped:是指.net core里面会有web请求,我们的服务就会跟着这个web请求,一次web请求就产生一个实例。它的声明周期到什么时候截止呢?就是web请求最终被处理完,它的声明周期就截止了。
    Singleton:服务的实例一旦被创建,那么以后所有请求这个服务的都会用这一个实例。它会一直存活到直到我们的应用程序停止。

    我们可以在ConfiureServices里面注册一些服务,注册到我们的IoC容器里面,

    这里打算使用.net core MVC所以这里需要注册。在core 2.0注册mvc使用的是AddMVC。在3.0里面我们就是用AddControllerWithViews()

    它表示什么呢?我们看下官方的文档。它包括Controllers Api相关的功能,但是不包括,Pages相关的。它就是传统的MVC

    如果想支持RazorPage就是使用下面这个方法

    如果我这个应用只是做api类的。不需要Views。我们直接使用AddControllers就可以了。这就不需要Views层。

    AddMvc提供的功能过于强大,我们不需要这么多的功能。

    目前来说我们使用MVC,使用AddControllersWithViews()就可以了。

    创建自己的服务

    新建Services文件夹。

    首先新建一个接口



    叫做IClock

    然后再创建两个类。一个叫做ChinaClock

    让它实现IClock这个接口。

    创建另外一个类叫做

    UtcClock也是实现IClock这个接口。

    注册自己写的服务

    AddSingleton表示注册的服务在.net core声明周期里面只有一个实例,直到整个应用程序停止才会销毁,
    后方面的方括号里面表示,每当有一个其他类型请求IClock实现了这个接口的对象的时候,我们这个IOC容器就会返回ChinaClock这个类的实例。

    使用这个服务,创建Controllers文件夹。

    新建HomeController。按照约定都以Controller结尾



    让他继承与Controller这个类,

    ctor创建一个构造函数

    构造函数内注入IClock

    如果想注入UtcClock,这里就这么配置。


    我们的Controller代码并没有更改,但是注入的类型就变成了UtcClock的类型。


    所以要尽量使用接口的这种形式,例如IClock

    这样使用接口以后,我们的Controller实际上跟具体这个服务类(服务类当前配置的是UtcClock),他俩之间就解耦了。


    DI的优点

    结束


     

  • 相关阅读:
    LTE第一章 介绍
    一本关于 LTE 非常好的书籍
    Memcached安装卸载
    很好很实用的.net、网站系统后台模板
    MS SQL 当记录不存在时插入insert INTO not exists
    数据库存储过程缺点总结
    存储过程是罪恶
    树形数据查询示例
    安装Discuz!论坛时提示“mysqli_connect() 不支持 advice_mysqli_connect”
    sql server中将一个表中的部分数据插入到另一个表中
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/12529481.html
Copyright © 2011-2022 走看看