.NET開發基礎知識1-10

1. 依賴注入(Dependency Injection)

  • 技術知識:依賴注入是一種設計模式,它允許將對象的依賴關系從對象本身中分離出來,通過構造函數、屬性或方法參數等方式注入到對象中。這樣可以提高代碼的可測試性、可維護性和可擴展性。
  • 案例:在一個簡單的后臺管理系統中,有一個用戶服務接口?IUserService?和其實現類?UserService。通過依賴注入,我們可以將?UserService?注入到控制器中。

    dotnet-core-dependency-injection.NET Core 依賴注入示例

    生成 Program.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;// 定義用戶服務接口
public interface IUserService
{string GetUserName();
}// 實現用戶服務接口
public class UserService : IUserService
{public string GetUserName(){return "John Doe";}
}// 定義用戶控制器
public class UserController
{private readonly IUserService _userService;public UserController(IUserService userService){_userService = userService;}public string GetUser(){return _userService.GetUserName();}
}var builder = WebApplication.CreateBuilder(args);// 注冊服務
builder.Services.AddScoped<IUserService, UserService>();var app = builder.Build();app.Run(async context =>
{var serviceProvider = app.Services;var userController = serviceProvider.GetRequiredService<UserController>();var userName = userController.GetUser();await context.Response.WriteAsync($"User Name: {userName}");
});app.Run();

2. 中間件(Middleware)

  • 技術知識:中間件是處理 HTTP 請求和響應的組件,它們按順序依次執行,可以對請求進行預處理,也可以對響應進行后處理。
  • 案例:創建一個簡單的日志中間件,記錄每個請求的信息。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading.Tasks;// 定義日志中間件
public class LoggingMiddleware
{private readonly RequestDelegate _next;public LoggingMiddleware(RequestDelegate next){_next = next;}public async Task InvokeAsync(Microsoft.AspNetCore.Http.HttpContext context){Console.WriteLine($"Request received at {DateTime.Now}: {context.Request.Path}");await _next(context);Console.WriteLine($"Response sent at {DateTime.Now}");}
}var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();// 使用日志中間件
app.UseMiddleware<LoggingMiddleware>();app.Run(async context =>
{await context.Response.WriteAsync("Hello, World!");
});app.Run();

3. 路由(Routing)

  • 技術知識:路由是將 HTTP 請求映射到相應的處理程序(如控制器的動作方法)的過程。
  • 案例:創建一個簡單的控制器,并使用路由來處理不同的請求。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;// 定義控制器
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{[HttpGet]public IActionResult Get(){return Ok("This is a weather forecast.");}
}var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();var app = builder.Build();app.UseRouting();app.UseEndpoints(endpoints =>
{endpoints.MapControllers();
});app.Run();

4. 實體框架核心(Entity Framework Core)

  • 技術知識:Entity Framework Core 是一個跨平臺的對象關系映射(ORM)框架,它允許開發人員使用面向對象的方式操作數據庫。
  • 案例:創建一個簡單的數據庫上下文和實體類,并進行數據的增刪改查操作。
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;// 定義實體類
public class Blog
{public int BlogId { get; set; }public string Url { get; set; }public List<Post> Posts { get; } = new List<Post>();
}public class Post
{public int PostId { get; set; }public string Title { get; set; }public string Content { get; set; }public int BlogId { get; set; }public Blog Blog { get; set; }
}// 定義數據庫上下文
public class BloggingContext : DbContext
{public DbSet<Blog> Blogs { get; set; }public DbSet<Post> Posts { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");}
}class Program
{static void Main(){using (var db = new BloggingContext()){// 添加博客db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });var count = db.SaveChanges();Console.WriteLine("{0} records saved to database", count);// 查詢博客var blogs = db.Blogs.OrderBy(b => b.Url).ToList();foreach (var blog in blogs){Console.WriteLine("Blog: {0}", blog.Url);}}}
}

5. 認證和授權(Authentication and Authorization)

  • 技術知識:認證是驗證用戶身份的過程,授權是確定用戶是否有權限訪問特定資源的過程。
  • 案例:使用 JWT(JSON Web Token)進行認證和授權。
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using System.Text;var builder = WebApplication.CreateBuilder(args);// 添加 JWT 認證服務
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{ValidateIssuer = true,ValidateAudience = true,ValidateLifetime = true,ValidateIssuerSigningKey = true,ValidIssuer = "YourIssuer",ValidAudience = "YourAudience",IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey"))};});// 添加授權服務
builder.Services.AddAuthorization(options =>
{options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
});builder.Services.AddControllers();var app = builder.Build();app.UseAuthentication();
app.UseAuthorization();app.MapControllers();app.Run();

6. 配置管理(Configuration Management)

  • 技術知識:配置管理允許將應用程序的配置信息(如數據庫連接字符串、API 密鑰等)與代碼分離,方便在不同環境中進行配置。

  • 案例:使用?appsettings.json?文件進行配置管理。

Program.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;var builder = WebApplication.CreateBuilder(args);// 讀取配置文件
var configuration = builder.Configuration;
var connectionString = configuration.GetConnectionString("DefaultConnection");// 可以使用 connectionString 進行數據庫連接等操作var app = builder.Build();app.Run(async context =>
{await context.Response.WriteAsync($"Connection String: {connectionString}");
});app.Run();

appsettings.json

{"ConnectionStrings": {"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"},"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
}

7. 日志記錄(Logging)

  • 技術知識:日志記錄是記錄應用程序運行時信息的過程,有助于調試和監控應用程序。
  • 案例:使用內置的日志記錄器記錄信息。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;var builder = WebApplication.CreateBuilder(args);// 添加日志服務
builder.Logging.AddConsole();var app = builder.Build();var logger = app.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Application started.");app.Run(async context =>
{logger.LogInformation("Request received.");await context.Response.WriteAsync("Hello, World!");logger.LogInformation("Response sent.");
});app.Run();

8. 異步編程(Asynchronous Programming)

  • 技術知識:異步編程允許應用程序在執行耗時操作(如數據庫查詢、網絡請求等)時不阻塞線程,提高應用程序的性能和響應能力。
  • 案例:使用?async?和?await?關鍵字進行異步數據庫查詢。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;var builder = WebApplication.CreateBuilder(args);// 添加日志服務
builder.Logging.AddConsole();var app = builder.Build();var logger = app.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Application started.");app.Run(async context =>
{logger.LogInformation("Request received.");await context.Response.WriteAsync("Hello, World!");logger.LogInformation("Response sent.");
});app.Run();

9. 單元測試(Unit Testing)

  • 技術知識:單元測試是對應用程序中的最小可測試單元(如方法、類等)進行測試的過程,有助于確保代碼的正確性和可維護性。
  • 案例:使用?xUnit?框架對一個簡單的服務進行單元測試。
using Xunit;// 定義一個簡單的服務
public class CalculatorService
{public int Add(int a, int b){return a + b;}
}public class CalculatorServiceTests
{[Fact]public void Add_TwoNumbers_ReturnsSum(){// Arrangevar calculator = new CalculatorService();int a = 2;int b = 3;// Actint result = calculator.Add(a, b);// AssertAssert.Equal(5, result);}
}

10. Web API 開發

  • 技術知識:Web API 是一種允許不同應用程序之間進行通信的接口,通常使用 HTTP 協議進行數據傳輸。
  • 案例:創建一個簡單的 Web API 控制器,提供數據查詢和添加功能。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Collections.Generic;// 定義數據模型
public class Product
{public int Id { get; set; }public string Name { get; set; }
}// 定義控制器
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{private static List<Product> _products = new List<Product>();[HttpGet]public IActionResult Get(){return Ok(_products);}[HttpPost]public IActionResult Post([FromBody] Product product){_products.Add(product);return CreatedAtAction(nameof(Get), new { id = product.Id }, product);}
}var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();var app = builder.Build();app.UseRouting();app.UseEndpoints(endpoints =>
{endpoints.MapControllers();
});app.Run();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74976.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日一題 MySQL基礎知識----(三)

數據庫常用基礎知識&#xff1a;代碼講解和實驗 1.創建數據庫student 02&#xff0c;創建一個名為student02的數據庫 CREATE DATABASE student02; 2.在student02中創建一張 students表&#xff0c;并且具有學生的編號id&#xff0c;姓名name&#xff0c;年齡age&#xff0c;生…

MySQL多表查詢實驗

1.數據準備 -- 以下語句用于創建 students 表&#xff0c;該表存儲學生的基本信息 -- 定義表名為 students CREATE TABLE students (-- 定義學生的唯一標識符&#xff0c;類型為整數&#xff0c;作為主鍵&#xff0c;且支持自動遞增student_id INT PRIMARY KEY AUTO_INCREMENT…

windows第二十章 單文檔應用程序

文章目錄 單文檔定義新建一個單文檔應用程序單文檔應用程序組成&#xff1a;APP應用程序類框架類&#xff08;窗口類&#xff09;視圖類&#xff08;窗口類&#xff0c;屬于框架的子窗口&#xff09;文檔類&#xff08;對數據進行保存讀取操作&#xff09; 直接用向導創建單文檔…

C++ 初階總復習 (16~30)

C 初階總復習 &#xff08;16~30&#xff09; 目的16. 2009. volatile關鍵字的作用17. 2010.什么是多態 簡單介紹下C的多態18. 2011. 什么是虛函數 介紹下C中虛函數的原理19. 2012 構造函數可以是虛函數嘛20. 2013.析構函數一定要是虛函數嘛&#xff1f;21. 2015. 什么是C中的虛…

第一天 Linux驅動程序簡介

目錄 一、驅動的作用 二、裸機驅動 VS linux驅動 1、裸機驅動 2、linux驅動 三、linux驅動位于哪里&#xff1f; 四、應用編程 VS 內核編程 1、共同點 2、不同點 五、linux驅動分類 1、字符設備 2、塊設備 3、網絡設備 六、Linux驅動學習難點與誤區 1、學習難點 …

PaddleX產線集成功能的使用整理

一、環境搭建 1.1 安裝paddle-gpu 需要根據安裝機器的cuda的版本&#xff0c;選擇合適的版本進行安裝 #安裝paddle-gpu 官網鏈接 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/linux-pip.html python -m pip install paddle…

docker-compese 啟動mysql8.0.36與phpmyadmin,并使用web連接數據庫

1、找一個文件夾&#xff0c;比如 E:\zqy\file\mysql&#xff0c;cd到這個目錄下創建文件docker-compose.yml 2、將下面的代碼塊復制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

解決 Gradle 構建錯誤:Could not get unknown property ‘withoutJclOverSlf4J’

解決 Gradle 構建錯誤&#xff1a;Could not get unknown property ‘withoutJclOverSlf4J’ 在構建 Spring 源碼或其他基于 Gradle 的項目時&#xff0c;可能會遇到如下錯誤&#xff1a; Could not get unknown property withoutJclOverSlf4J for object of type org.gradle…

mcp 接freecad畫齒輪

from mcp.server.fastmcp import FastMCP import freecad.gears.commands import os from freecad import app from freecad import part mcp FastMCP("Demo")mcp.tool() def create_gear(num_teeth20,height10,double_helix True):"""創建一個漸開線…

【大前端系列19】JavaScript核心:Promise異步編程與async/await實踐

JavaScript核心&#xff1a;Promise異步編程與async/await實踐 系列: 「全棧進化&#xff1a;大前端開發完全指南」系列第19篇 核心: 深入理解Promise機制與async/await語法&#xff0c;掌握現代異步編程技術 &#x1f4cc; 引言 在JavaScript的世界中&#xff0c;異步編程是無…

如何排查java程序的宕機和oom?如何解決宕機和oom?

排查oom 用jmap生成我們的堆空間的快照Heap Dump&#xff08;堆轉儲文件&#xff09;&#xff0c;來分析我們的內存占用 用可視化工具&#xff0c;例如java中的jhat分析Heap Dump文件 &#xff0c;它分析完會通過一個瀏覽器打開一個可視化頁面展示分析結果 根據oom的類型來調…

什么是 OLAP 數據庫?企業如何選擇適合自己的分析工具

引言&#xff1a;為什么企業需要 OLAP 數據庫&#xff1f; 你是否曾經經歷過這樣的場景&#xff1a; 市場部門急需一份用戶行為分析報告&#xff0c;數據團隊告訴你&#xff1a;“數據太大了&#xff0c;報表要跑 4 個小時”&#xff1b;業務負責人在會議中提出一個臨時性分析…

測試:認識Bug

目錄 一、軟件測試的生命周期 二、bug 一、軟件測試的生命周期 軟件測試貫穿于軟件的生命周期。 需求分析&#xff1a; ???度&#xff1a;軟件需求是否合理 技術?度&#xff1a;技術上是否可?&#xff0c;是否還有優化空間 測試?度&#xff1a;是否存在業務邏輯錯誤、…

綜合實驗2

1、sw1和sw2之間互為備份 [sw1]interface Eth-Trunk 0 &#xff08;創建聚合接口&#xff09; [sw1-Eth-Trunk0]trunkport g0/0/1 &#xff08;將物理接口劃入到聚合接口中&#xff09; [sw1-Eth-Trunk0]trunkport g0/0/2 [sw2]interface Eth-Trunk 0 [sw2-Eth-T…

【ArcGIS】ArcGIS10.6徹底卸載和ArcGIS10.2安裝全過程

卸載python3后,解決了ArcGIS與python3沖突問題后,軟件可以正常打開使用了 但是還是出現了問題 用ArcGIS 進行空間分析時,中間操作沒有任何報錯和問題,但是就是沒有運行結果 在別人的軟件上操作一遍可以出現運行結果 關閉確有這個,但真的不是我給它的運行時間不夠,反反復復試…

Django之旅:第五節--Mysql數據庫操作(一)

Django開發操作數據庫更簡單&#xff0c;內部提供了ORM框架 一、安裝第三方模塊 pip install mysqlclient注&#xff1a;最新的django框架需要使用mysqlclient模塊&#xff0c;之前pymysql模塊與django框架有編碼兼容問題。 二、ORM 1、ORM可以幫助我們做兩件事&#xff1a;…

docker部署mongodb數據庫

1、下載 MongoDB 鏡像 使用Docker部署MongoDB 之前&#xff0c;我們需要從 Docker Hub 上下載 MongoDB 鏡像。這里我們下載最新版本的 MongoDB 鏡像&#xff0c;使用以下命令進行下載&#xff1a; docker pull mongo:latest 下載完成后&#xff0c;我們就擁有了最新版本的 Mon…

Enhanced PEC-YOLO:電力施工場景安全裝備檢測的輕量化算法解析

目錄 一、核心概述 二、核心創新點 1. ?C2F_Faster_EMA模塊 2. ?SPPF_CPCA多尺度模塊 3. ?BiFPN頸部網絡

【人工智能】解鎖大模型潛力:Ollama 與 DeepSeek 的分布式推理與集群部署實踐

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著大語言模型(LLM)的快速發展,其推理能力在自然語言處理、代碼生成等領域展現出巨大潛力。然而,單機部署難以滿足高并發、低延遲的需…

RTMP推流服務器nginx在linux上的編譯部署

RTMP&#xff08;Real-Time Messaging Protocol&#xff09;推流確實需要服務器支持?。RTMP推流服務器的主要功能是接收來自推流客戶端的數據流&#xff0c;對其進行處理和轉發。服務器會根據RTMP協議與客戶端建立連接&#xff0c;處理推流數據&#xff08;如轉碼、錄制等&…