当前位置: 首页 > news >正文

.NET开发基础知识11-20

11. 配置热更新

  • 技术知识:在 .NET Core 中,配置文件(如 appsettings.json)修改后,应用程序能自动加载新配置,无需重启应用,这提高了运维效率。

Program.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

// 定义配置类
public class MyOptions
{
    public string MySetting { get; set; }
}

var builder = WebApplication.CreateBuilder(args);

// 配置强类型选项
builder.Services.Configure<MyOptions>(builder.Configuration.GetSection("MyOptions"));

var app = builder.Build();

var options = app.Services.GetRequiredService<Microsoft.Extensions.Options.IOptions<MyOptions>>().Value;
System.Console.WriteLine($"MySetting value: {options.MySetting}");

app.Run();
    

appsettings.json

{
    "MyOptions": {
        "MySetting": "Hello, Options!"
    }
}    

12. 环境变量配置

  • 技术知识:可通过环境变量为 .NET Core 应用提供配置,这在不同环境(开发、测试、生产)部署时很有用,能灵活调整应用配置。

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);

// 从环境变量加载配置
builder.Configuration.AddEnvironmentVariables();

var app = builder.Build();

var config = app.Services.GetRequiredService<IConfiguration>();
var myEnvSetting = config["MyEnvSetting"];
if (!string.IsNullOrEmpty(myEnvSetting))
{
    Console.WriteLine($"Value from environment variable: {myEnvSetting}");
}
else
{
    Console.WriteLine("Environment variable not set.");
}

app.Run();
    

13. 自定义服务生命周期

  • 技术知识:在 .NET Core 里,可自定义服务的生命周期,像创建单例服务、作用域服务和瞬态服务,以满足不同的业务需求。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

// 定义服务接口
public interface IMyService
{
    void DoWork();
}

// 定义服务实现
public class MyService : IMyService
{
    public void DoWork()
    {
        System.Console.WriteLine("Service is doing work.");
    }
}

var builder = WebApplication.CreateBuilder(args);

// 注册单例服务
builder.Services.AddSingleton<IMyService, MyService>();

var app = builder.Build();

var service = app.Services.GetRequiredService<IMyService>();
service.DoWork();

app.Run();
    

14. 过滤器(Filter)

  • 技术知识:过滤器能在请求处理管道的特定阶段执行代码,如授权过滤器、动作过滤器、异常过滤器等,可用于实现日志记录、权限验证等功能。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

// 自定义动作过滤器
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        System.Console.WriteLine("Before action execution");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        System.Console.WriteLine("After action execution");
        base.OnActionExecuted(context);
    }
}

// 定义控制器
[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
    [HttpGet]
    [CustomActionFilter]
    public IActionResult Get()
    {
        return Ok("Hello, World!");
    }
}

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.UseRouting();
app.MapControllers();

app.Run();
    

15. 中间件顺序

  • 技术知识:中间件的执行顺序对请求处理流程有重要影响,合理安排中间件顺序能确保应用按预期工作。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

// 自定义动作过滤器
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        System.Console.WriteLine("Before action execution");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        System.Console.WriteLine("After action execution");
        base.OnActionExecuted(context);
    }
}

// 定义控制器
[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
    [HttpGet]
    [CustomActionFilter]
    public IActionResult Get()
    {
        return Ok("Hello, World!");
    }
}

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.UseRouting();
app.MapControllers();

app.Run();
    

16. 端点路由

  • 技术知识:端点路由是 .NET Core 3.0 引入的新路由系统,提供更灵活、高效的路由配置方式,支持属性路由、约定路由等。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapGet("/", async context =>
    {
        await context.Response.WriteAsync("Hello from root!");
    });

    endpoints.MapGet("/about", async context =>
    {
        await context.Response.WriteAsync("This is the about page.");
    });
});

app.Run();

17. 应用启动配置

  • 技术知识:可在应用启动时进行各种配置,如设置日志级别、添加服务、配置中间件等,确保应用按需求启动。
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.ClearProviders();
builder.Logging.AddConsole();

// 添加服务
builder.Services.AddControllers();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.UseRouting();
app.MapControllers();

app.Run();
    

18. 依赖注入作用域

  • 技术知识:依赖注入作用域定义了服务实例的生命周期范围,如单例服务在整个应用生命周期内只有一个实例,作用域服务在每个请求周期内只有一个实例。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

// 定义服务接口
public interface IMyScopedService
{
    void DoWork();
}

// 定义服务实现
public class MyScopedService : IMyScopedService
{
    public void DoWork()
    {
        System.Console.WriteLine("Scoped service is doing work.");
    }
}

var builder = WebApplication.CreateBuilder(args);

// 注册作用域服务
builder.Services.AddScoped<IMyScopedService, MyScopedService>();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var scopedService = scope.ServiceProvider.GetRequiredService<IMyScopedService>();
    scopedService.DoWork();
}

app.Run();
    

19. 配置强类型选项

  • 技术知识:可将配置文件中的配置项映射到强类型类,便于在代码中使用,提高代码的可读性和可维护性。

Program.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

// 定义配置类
public class MyOptions
{
    public string MySetting { get; set; }
}

var builder = WebApplication.CreateBuilder(args);

// 配置强类型选项
builder.Services.Configure<MyOptions>(builder.Configuration.GetSection("MyOptions"));

var app = builder.Build();

var options = app.Services.GetRequiredService<Microsoft.Extensions.Options.IOptions<MyOptions>>().Value;
System.Console.WriteLine($"MySetting value: {options.MySetting}");

app.Run();
    

appsettings.json

{
    "MyOptions": {
        "MySetting": "Hello, Options!"
    }
}    

20. 应用程序生命周期事件

  • 技术知识:.NET Core 应用有多个生命周期事件,如启动、停止等,可通过订阅这些事件执行特定代码,如资源清理、日志记录等。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

var lifetime = app.Services.GetRequiredService<IHostApplicationLifetime>();

lifetime.ApplicationStarted.Register(() =>
{
    Console.WriteLine("Application has started.");
});

lifetime.ApplicationStopping.Register(() =>
{
    Console.WriteLine("Application is stopping.");
});

lifetime.ApplicationStopped.Register(() =>
{
    Console.WriteLine("Application has stopped.");
});

app.Run();
    

http://www.dtcms.com/a/99163.html

相关文章:

  • Lavazza拉瓦萨亮相上海樱花节,增色海派咖啡风情
  • rbpf虚拟机-汇编和反汇编器
  • OpenCV、YOLO与大模型的区别与关系
  • Web开发:数据的加密和解密
  • Python之函数
  • 图片RGBA像素值提取工具v1.0.0发布
  • 【原理系列】计算机组成原理-第一遍阅读总结
  • Flutter_学习记录_AppBar中取消leading的占位展示
  • Python:日志模块操作及基本配置,日志格式化输出
  • Mybatis源码 插件机制
  • Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出
  • 人工智能与软件工程结合的发展趋势
  • 一些常用开发软件下载地址
  • [Python]如何利用Flask搭建一個Web服務器,並透過Ngrok訪問來實現LINE Bot功能?
  • MySQL数据库的操作(mybatis)
  • Spring学习笔记06——bean、java bean、spring bean、POJO几个概念讲解
  • 算法刷题记录——LeetCode篇(1.2) [第11~20题](持续更新)
  • Labview学习记录
  • 杂草YOLO系列数据集4000张
  • 【MySQL基础-16】MySQL DELETE语句:深入理解与应用实践
  • Ray AI - 概述、安装、入门
  • 【HTML 基础教程】HTML <head>
  • Java多线程与高并发专题——Condition 和 wait/notify的关系
  • python:模块
  • app整改报告怎么写?app整改方案分享
  • 液压式精密矫平机——精准掌控,重塑金属平整新高度
  • 【黑马点评】Redis解决集群的session共享问题
  • wait函数等待多个子进程
  • vue3对比vue2新增特性
  • CSS 边框(Border)样式详解