C# .NetCore知识点-程序员宅基地

技术标签: c#  .netcore  开发语言  

1、.netCore的执行过程

在这里插入图片描述

2、如何在controller中注入service?

在Config Services方法中配置这个service
在Controller的构造函数中 添加这个依赖注入

3、.netCore比.net更具优势的地方是什么?

跨平台,可以运行在 Windows 、Linux 和 MAC 系统上
对框架本身安装没有依赖,所有依赖都和程序本身在一起
.netCore处理请求的效率更高,进而可以处理更多的请求
具有更多的安装配置方法

4、.netCore主要的特性有哪些?

依赖注入
日志系统架构
引入了一个跨平台的网络服务器kestrel,可以没有iis 、apache和nginx就可单独运行
可以使用命令行创建应用
使用AppSettings.json来配置工程
使用start up来注册服务
更好的支持异步编程
支持web socket和signal IR
对于跨网站的请求的预防和保护机制

5、.NetCore Filter如何支持依赖注入

通过全局注册,支持依赖注入
通过TypeFilter(typeof(Filter))标记在方法,标记在控制器
通过ServiceType(typeof(Filter))标记在方法,标记在控制器,必须要注册Filter这类
TypeFilter和ServiceType的本质是实现了一个IFilterFactory接口

6、.NetCore 中有哪些异常处理方案

  • 继承Controller,重写OnActionExecuted
  • 使用 ActionFilterAttribute
  • 使用 IExceptionFilter
  • 使用ExceptionHandler
  • 自定义Middleare处理

7、介绍一下.NetCore中服务的生命周期

ASP.NET Core支持依赖注入软件设计模式,它允许在不同的组件中注入我们的服务,并且控制服务的初始化。有些服务可以在短时间内初始化,并且只能在某个特别的组件,以及请求中才能用到;而还有一些服务,仅仅只用初始化一次,就可以在整个应用程序中使用。

Singleton — 单例模式
只有一个服务的实例被创建,这个实例,存储在内存中,可以在整个应用程序中使用。我们可以对一些初始化代价比较大的服务,使用Singleton模式。

services.AddSingleton<IProductService,ProductService>();

Scoped — 作用域模式
这种模式下,将会为每一个请求,都创建一个服务的实例。所有同一个请求中的中间件、MVC控制器等等,都会得到一个相同的服务实例。Entity Framework Context就是一个Scoped服务最好的参考例子。

services.AddScoped<IProductService,ProductService>();

Transient — 短暂的、瞬变的
Transient模式下,服务每次被请求的时候,都会创建一个服务实例,这种模式特别适合轻量级、无状态的服务。

services.AddTransient<IProductService,ProductService>();

8、什么是依赖注入

依赖注入是一个过程,就是当一个类需要调用另一个类来完成某项任务的时候,在调用类里面不要去new被调用的类的对象,而是通过注入的方式来获取这样一个对象。具体的实现就是在调用类里面有一个被调用类的接口,然后通过调用接口的函数来完成任务。比如A调用B,而B实现了接口C,那么在A里面用C定义一个变量D,这个变量的实例不在A里面创建,而是通过A的上下文来获取。这样做的好处就是将类A和B分开了,他们之间靠接口C来联系,从而实现对接口编程。

9、依赖注入有几种方式

setter注入:
就是在类A里面定义一个C接口的属性D,在A的上下文通过B实例化一个对象,然后将这个对象赋值给属性D。主要就是set 与 get
构造函数注入:
就是在创建A的对象的时候,通过参数将B的对象传入到A中。
还有常用的注入方式就是工厂模式的应用了,这些都可以将B的实例化放到A外面,从而让A和B没有关系。还有一个接口注入,就是在客户类(A)的接口中有一个服务类(B)的属性。在实例化了这个接口的子类后,对这个属性赋值,这和setter注入一样。
接口注入:
相比构造函数注入和属性注入,接口注入显得有些复杂,使用也不常见。具体思路是先定义一个接口,包含一个设置依赖的方法。然后依赖类,继承并实现这个接口。

10、控制反转是什么

控制反转(Inversion of Control,缩写为Ioc),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫依赖注入(Dependency Injection,简称DI),还有一种方式叫依赖查找(Dependency Lookup)。
通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

11、依赖注入有哪些著名的框架?

Unity、autofac、http://spring.net、MEF、Injection、Asp.Net Core的ServiceCollection。

12、什么是dot net core的startup class?

StartUp.Class是.NetCore应用的入口。所有的.netCore应用必须有这个class,这个类用来配置服务。这个类的调用是在program main函数里面进行配置的。类的名字可以自己定义。

13、startup class的configure方法有什么作用?

这个方法来定义整个应用如何响应HTTP请求。它有几个比较重要的参数,application builder、Hosting environment、logo factory,在这里我们可以配置一些中间件用来处理路径、验证和session等。

14、什么是中间件(Middleware)?

中间件是组装到应用程序管道中以处理请求和响应的软件。
每个组件:

  • 选择是否将请求传递给管道中的下一个组件
  • 可以在调用管道中的下一个组件之前和之后执行工作

15、中间件的使用场景有哪些?

身份验证,Session存储,日志记录等
其实我们的Asp.net core项目中本身已经包含了很多个中间件。比如 身份认证中间件UseAuthorization()等系列。

16、列举官方常用的中间件?

异常/错误处理 当应用在开发环境中运行时: 开发人员异常页中间件 (UseDeveloperExceptionPage) 报告应用运行时错误。 数据库错误页中间件报告数据库运行时错误。 当应用在生产环境中运行时: 异常处理程序中间件 (UseExceptionHandler) 捕获以下中间件中引发的异常。 HTTP 严格传输安全协议 (HSTS) 中间件 (UseHsts) 添加 Strict-Transport-Security 标头。
HTTPS 重定向中间件 (UseHttpsRedirection) 将 HTTP 请求重定向到 HTTPS。
静态文件中间件 (UseStaticFiles) 返回静态文件,并简化进一步请求处理。
Cookie 策略中间件 (UseCookiePolicy) 使应用符合欧盟一般数据保护条例 (GDPR) 规定。用于路由请求的路由中间件 (UseRouting)。
身份验证中间件 (UseAuthentication) 尝试对用户进行身份验证,然后才会允许用户访问安全资源。
用于授权用户访问安全资源的授权中间件 (UseAuthorization)。
会话中间件 (UseSession) 建立和维护会话状态。 如果应用使用会话状态,请在 Cookie 策略中间件之后和 MVC 中间件之前调用会话中间件。
用于将 Razor Pages 终结点添加到请求管道的终结点路由中间件(带有 MapRazorPages 的 UseEndpoints)。

17、中间件的执行顺序

在这里插入图片描述
从图片中看到执行顺序就是在第一个中间件中执行第一步,然后执行第二个中间件的第一步,然后执行第三个中间件,之后返回执行第二个中间件的第二部在执行第一个中间件的第二部,整体像绕了一个圈子。

18、application builder的use和run方法有什么区别?

这两个方法都是在start up class中的configure方法中调用的。都是用来向应用请求管道里面添加中间件的。use方法可以调用下一个中间件的添加,而run不会。

19、dot net core 管道里面的map拓展有什么作用?

可以针对不同的路径添加不同的中间件

20、dot net core里面的路径是如何处理的?

路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。
主要有两种路径处理方式, 常规路径处理和属性路径处理。常规路径处理就是用MapRoute的方式设定调用路径,属性路径处理是指在调用函数的上方设定一个路径属性。

21、dot net core工程里面有哪些常见的工程文件?

global、launchsetting、appsettings、bundleconfig、bower、package

22、依赖注入实现原理?

实现DI,核心在于依赖注入容器(IContainer),该容器具有以下功能:

  • (容器)保存可用服务的合集
  • (注册)提供一种方式将各种部件与他们依赖的服务绑定到一起
  • (解析点)为应用程序提供一种方式来请求已配置的对象

23、ASP.NET Core项目如何设置IP地址和端口号?

可以使用Properties文件夹下的launchSettings配置文件来配置不同的启动方式的时候,分别配置IP和端口号。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43420566/article/details/123116284

智能推荐

使用Go默写古诗词_python中默写诗词-程序员宅基地

文章浏览阅读590次。“白日依山尽,___”。下句自然填黄河入海流,那么“日月忽其不淹兮,___,___,恐美人之迟暮”,中间两句怎么填呢? 最近工作中有个需求,就是1500道语文诗词填空题没有答案,现在需要给这些题目大爷们匹配它们对应的答案,好在题目信息都很完整,指出了诗词出处、作者信息。自然想到到网上爬取对应文章信息然后字符串匹配答案。目前做完,效果还可以,基本上所有题目的答案都有了,现把操作流程记..._python中默写诗词

消息队列——kafka——java集成与操作-程序员宅基地

文章浏览阅读1.6k次。目录一、java集成kafka:1、所需环境:2、引入jar包:3、创建基础Properties:(1)单机kafka的基础Properties:(2)集群kafka的基础Properties:4、创建生产者公共参数Properties:5、创建消费者公共参数Properties:二、Java操作kafka:1、创建topic:2、查看所有topic:...

计算机网络ip地址在哪,w7的ip地址在哪?小编教你怎么查看-程序员宅基地

文章浏览阅读528次。很多刚开始使用windows7系统的朋友不知道w7的ip地址在哪。w7的ip地址在哪?小编教你怎么查看w7的ip地址。今天小编就带来了两种非常简单查看w7的ip地址的方法供大家学习。w7的ip地址在哪的详细方法教程就在下面。希望对大家都有帮助。有两种方式可以查看:A、直接通过网络图标本地属性查看;B、通过运行命令提示符进行查看。具体操作如下:1.通过网络图标本地属性查看:右键桌面右下角的网络图标 ..._电脑w7网址在哪里

Buffer I/O error on device mmcblk0p3 logical block /end-程序员宅基地

文章浏览阅读2.9k次。Buffer I/O error on device mmcblk0p3 logical block /end_buffer i/o error on device mmcblk0

Scala 数组、映射和集合+wordcount程序-程序员宅基地

文章浏览阅读74次。数组1、定长数组和变长数组package cn.gec.scala import scala.collection.mutable.ArrayBuffer object ArrayDemo { def main(args: Array[String]) { //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = n..._scala array[long] wordcount

代码:灰度重心法提取线激光条纹中心线(CPP+OpenCV)_灰度中心法-程序员宅基地

文章浏览阅读2.1k次。灰度重心法是根据每行光条纹横截面内的灰度分布特征逐行进行处理,通过在行坐标的方向上,逐行计算提取光条纹区域的灰度重心点,并将该点用来代表该截面的光条纹中心点位置,最后将所有中心点拟合形成光条纹中心线。灰度重心法计算光条纹中心点的公式(光条纹第v列的灰度重心坐标):图像包含U行、V列的图像中坐标(u, v)处的像素灰度值为I(u,v),其中u=1,2,3,…,U; v=1,2,3…,V。灰度重心法提取光条纹中心线时运算速度快,实时性好。但是易受图像中的噪点干扰,导致中心线坐标偏移。#include._灰度中心法

随便推点

python OPCUA服务器和客户端开发_import sys sys.path.insert(0, "..") import time fr-程序员宅基地

文章浏览阅读2.6k次。环境准备安装开源的OPCUA包,安装采用pip安装。pip install opcua服务器端程序开发主要需要修改的内容为发布的网络地址:127.0.0.1表示发布为本机地址。import syssys.path.insert(0, "..")import timefrom opcua import ua, Serverif __name__ == "__main__": # setup our server server = Server() ._import sys sys.path.insert(0, "..") import time from opcua import ua, server

Cesium加载无水印高清影像,UE5加载最新无水印影像。-程序员宅基地

文章浏览阅读480次,点赞25次,收藏14次。Cesium加载无水印高清影像。UE加载无水印印象

JSON与AJAX基础-2_ys.getjson-程序员宅基地

文章浏览阅读101次。1.jQuery的ajax方法1.1 $.ajax()$.ajax({ //把所有的参数写在大括号中,省略了创建对象 url:"ys/sliders.json",//请求地址 type:"post",//请求方式 async:true,//同步异步 dataType:"json",//规定服务端返回的数据类型,代替JSON.parse //省略了send请求 success:function(imgData){//请求成功的回调,参数直接保存返回的数据,依然建议将渲染数据封装_ys.getjson

Spring Boot 和Spring Cloud版本对应关系参考指南-程序员宅基地

文章浏览阅读667次。在实际项目开发过程中,可能避免不了进行框架搭建,很多时候可能无法理清Spring Boot 和Spring Cloud版本对应关系。可以访问下面Spring 官方对应版本地址:https://start.spring.io/actuator/info{"git": {"commit": {"time": "2020-04-30T13:55:37Z","id": "a33429f"...

收敛交叉映射CCM学习记录(1)_收敛交叉映射matlab代码-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏4次。今天发现了一个问题,在rEDM的帮助文档里,它说CCM()函数会产生一个数据框,第一列是库的长度,第二三列是相关系数,“第二列是从Y中预测的X,第三列是从X中预测的Y”。这就意味着在第二列中:第二列是X的预测值与X的观测值之间的相关系数,也就是说假设X是原因,Y是结果,因为只有这样的因果方向,才会从Y中预测X。However,在它的鱼类和温度的示例里,和上述文字描述截然相反data(sardine_anchovy_sst)df <- CCM( dataFrame=sardine_anc_收敛交叉映射matlab代码

杭电2048解题报告_2048报告-程序员宅基地

文章浏览阅读1k次。Problem Description HDU 2006’10 ACM contest的颁奖晚会隆重开始了! 为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动,这个活动的具体要求是这样的:首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中; 然后,待所有字条加入完毕,每人从箱中取一个字条; 最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”大家可以想象一_2048报告