1. Dotnet9首页
  2. .NET
  3. .NET相关

.NET Core 学习资料精选:入门

 开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了……

    本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料。我进行了知识点归类,让大家可以更清晰的学习.NET Core。

首先感谢资料原作者的贡献。

第一篇:.NET Core 学习资料精选:入门

    介绍.NET历史、开源之路、基础、路由、依赖注入DI、HttpContext、cookie|session、HttpClient、gRPC、单元测试、发布部署等等。

第二篇:.NET Core 学习资料精选:进阶

    介绍.NET工程化、AOP、异常处理、缓存、日志、响应优化、上传下载、健康检查、后台任务、认证和授权、安全性(Https、CORS、CSRF)、EF Core 等等

第三篇:.NET Core 学习资料精选:高级&微服务架构

    介绍性能、原理、微服务架构、Docker、DDD等知识

这是第一篇,知识点如图:

.NET Core 学习资料精选:入门

.NET 简介

#、.NET 开源之路

.NET Core 学习资料精选:入门
.NET Core 学习资料精选:入门
.NET Core 学习资料精选:入门

.NET Core Roadmap

.NET Core 学习资料精选:入门

#、.NET Core提供的特性

1.免费和最宽松的开源协议

.NET Core从属于.NET基金会,由微软进行官方支持。使用最宽松的MIT和Apache 2开源协议,文档协议遵循CC-BY。这将允许任何人任何组织和企业任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版权和许可提示,后者协议将会除了为用户提供版权许可之外,还有专利许可,并且授权是免费,无排他性的(任何个人和企业都能获得授权)并且永久不可撤销,用户使用.NET Core完全不用担心收费问题,你可以很自由的部署在任何地方.

2.轻量级、跨平台

3.组件化、模块化、IOC+Nuget、中间件

4.高性能

5.统一了MVC和WebAPI编程模型

a)  比如:ASP.NET Core 中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化

b)  比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API 分别编写代码,但在ASP.NET Core,直接使用一套中间件代码即可

6.可测试性

7.微服务、容器化支持

8.标准化 .NET API 规范- .NET STANDARD

#、迁移到.NET Core

目前市面上还存在很多传统 .NET 旧项目,我们需要根据公司情况决定是否升级到.NET Core。

如果需要进行旧项目升级的,可以参考文章:《.NET项目迁移到.NET Core操作指南

VS和.NET Core安装

Vistual Studio

调试

VS Code 开发.NET Core

.NET Core SDK

基础

术语:

  dotnet publish 发布的文件中包含pdb文件,不论模式是Debug还是Release。可以通过配置:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
          <DebugType>None</DebugType>
          <DebugSymbols>false</DebugSymbols>
          ……
</PropertyGroup>

–self-contained 自包含参数。将.NET Core运行时及.NET Core类库随应用一起打包,这样可以完全避免老项目在系统.NET Core运行时升级时,带来莫名异常的问题

.NET Core 运行程序注意事项(dotnet dll 与 dotnet run)

core api 支持情况

配置

路由、模型绑定

ASP.NET Core WebAPI中,Controller标注 [ApiController] 特性,其路由只能使用[route]特性方式

控制反转、依赖注入

什么是控制反转,和依赖注入:

     依赖倒置原则(Dependence inversion principle,DIP):软件设计原则,要依赖于抽象,不要依赖具体实现。

控制反转(Inversion of Control,IoC):IOC是一种实现DIP原则的模式。平常我们需要一个类对象的时候需要new出来,而现在我们把new一个类对象的工作交给了IOC容器,当我们需要一个类对象的时候直接向IOC容器要,就可以了,这个就是控制反转。(控制权交个了IOC容器)

依赖注入(Dependency Injection,DI):DI是实现IOC的一种方式。当我需要一个类对象,IOC容器给我们这个类对象的过程其实就是依赖注入,依赖注入有构造函数注入和属性注入。

官方推荐通过构造函数。这也是所谓的显式依赖。Asp.Net Core 的标准依赖注入容器不支持属性注入。(可以使用autofac或者其他来实现属性注入)

可以参考 OSharp 框架,设计三个全局注入接口,来实现自动化注入:ISingletonDependency 和 ITransientDependency 、 IScopedDependency ( 单例、瞬时、范围)。

ASP.NET Core 中如何注入同一个接口的多个实现

案例1:使用nlog时,想根据需要使用不同的配置文件Nlog.config 写日志时,就可以使用文章中介绍的 Factory 命名注入方案来实现

案例2:使用分布式缓存 IDistributedCache 时,想根据需要在一个项目中同时使用redis和sqlserver

#、ASP.NET Core 结合 Autofac 的使用

ASP.NET Core 中使用Autofac实现属性注入的代码片段

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    // 第一步:替换系统默认Controller创建器(否则Controller下面无法使用属性注入)
    // 在 services.AddMvc() 之前
    services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
    services.AddMvc();
 
    var builder = new ContainerBuilder();
 
    // 第二步:找到所有Controller的类型
    // 通过Autofac对Controller类型进行属性注册 PropertiesAutowired()
    var assembly = this.GetType().GetTypeInfo().Assembly;
    var manager = new ApplicationPartManager();
    manager.ApplicationParts.Add(new AssemblyPart(assembly));
    manager.FeatureProviders.Add(new ControllerFeatureProvider());
    var feature = new ControllerFeature();
    manager.PopulateFeature(feature);
    builder.RegisterTypes(feature.Controllers.Select(ti => ti.AsType()).ToArray()).PropertiesAutowired();
    // 第三步:配置 ContainerBuilder,返回 IServiceProvider 
    builder.Populate(services);
    return new AutofacServiceProvider(builder.Build());
}

#、构造函数注入&属性注入

描述来源于Abp.io中文文档:查看详情

构造方法注入

        是将依赖项注入类的首选方式.这样,除非提供了所有构造方法注入的依赖项,否则无法构造类.因此,该类明确的声明了它必需的服务.

属性注入

public class MyService : ITransientDependency
        {
                public ILogger<MyService> Logger { get; set; }

                public MyService()
                {
                        Logger = NullLogger<MyService>.Instance;
                }

        }

对于属性注入依赖项,使用公开的setter声明公共属性.这允许DI框架在创建类之后设置它.
属性注入依赖项通常被视为可选依赖项.这意味着没有它们,服务也可以正常工作.Logger就是这样的依赖项,MyService可以继续工作而无需日志记录.
为了使依赖项成为可选的,我们通常会为依赖项设置默认/后备(fallback)值.在此示例中,NullLogger用作后备.因此,如果DI框架或你在创建MyService后未设置Logger属性,则MyService依然可以工作但不写日志.
属性注入的一个限制是你不能在构造函数中使用依赖项,因为它是在对象构造之后设置的.
当你想要设计一个默认注入了一些公共服务的基类时,属性注入也很有用.如果你打算使用构造方法注入,那么所有派生类也应该将依赖的服务注入到它们自己的构造方法中,这使得开发更加困难.但是,对于非可选服务使用属性注入要非常小心,因为它使得类的要求难以清楚地看到.

ASP.NET Core WebAPI

创建ASP.NET Core Web API (ControllerBase、参数绑定源)

版本控制

ASP.NET Core:MVC 与 Razor Pages

新的 Razor 机制

WebForm & MVC & Razor Pages

HttpContext

状态管理

常见方式:Cookie、Session、TempData、查询字符串、HttpContext.Items、缓存、依赖关系注入

ASP.NET Core 中的会话和应用状态

Cookie 的 SameSite 属性(注意http>>https重定向跨域导致的cookie丢失问题)

#、session

ASP.NET Core 在通用数据保护条例规则下使用 session

ASP.NET Core 使用Redis存储Session

#、cookie

ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用

[github]ASP.NET Core CookieManager

通信

对比 gRPC 服务和 HTTP API 服务

#、HttpClient

传统.NET HttpClient坑

#、RPC

  Grpc

  DotNetty

       [github]Azure开源的网络通信框架DotNetty

#、SignalR

发布部署

单元测试

视频教程

==============================================================================

over,谢谢查阅,觉得文章对你有收获,请多帮推荐。欢迎向我提供更好的资料信息。

.NET Core 学习资料精选:入门

原文出处:博客园【作者:滴答的雨】

原文链接:https://www.cnblogs.com/heyuquan/p/dotnet-basic-learning-resource.html

本文观点不代表Dotnet9立场,转载请联系原作者。


.NET课程推荐
  1. 《.NET Core开发实战》  -  .NET Core微服务架构最佳实践                     点击了解更多
  2. 《.NetCore实战精品集》-  分布式/跨平台/微服务/前后分离/IOC/ORM  点击了解更多

发表评论

登录后才能评论

联系我们

186-2806-45xx

在线咨询:点击这里给我发消息

邮件:632871194@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code