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

.NET Core 中依赖注入的使用

ASP.NET Core中服务注入的地方

  1. 在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builder.Services中注入。
  2. 在Controller中可以通过构造方法注入服务。

低使用频率的服务

  1. 把Action用到的服务通过Action的参数注入,在这个参数上标注[FromServices]。和Action的其他参数不冲突。
  2. 一般不需要,只有调用频率不高并且资源的创建比较消耗资源的服务才[FromServices]。
  3. 只有Action方法才能用[FromServices] ,普通的类默认不支持。
public class student
{public int add(int a, int b){return a + b;}
}program:
builder.Services.AddScoped<student>();[Route("api/[controller]/[action]")]
[ApiController]
public class LoginController : ControllerBase
{private readonly student students;public LoginController(student students){this.students = students;}[HttpGet]public int abc(int id){return new student().add(1, 2);}
}

开发模块化的服务注册框架

在分层项目中,让各个项目负责各自的服务注册。

  1. Install-Package Zack.Commons
  2. 每个项目中创建一个或者多个实现了IModuleInitializer接口的类。
  3. 在Program.cs初始化DI容器

var assemblies = ReflectionHelper.GetAllReferencedAssemblies();
builder.services.RunModuleInitializers(assemblies);
 

namespace ClassLibrary1
{public class Class1{public int Hello(){return 1;}}
}namespace ClassLibrary1
{internal class ModuleInitializer : IModuleInitializer{public void Initialize(IServiceCollection services){services.AddScoped<Class1>();}}
}namespace WebApplication2.Controllers
{[Route("api/[controller]/[action]")][ApiController]public class PersonController : ControllerBase{private readonly Class1 class1;private readonly Class2 class2;public PersonController(Class1 class1, Class2 class2){this.class1 = class1;this.class2 = class2;}[HttpGet]public int Hello(){return class1.Hello();}}
}//Program添加
//获取所有的用户程序集
var assemblies = ReflectionHelper.GetAllReferencedAssemblies();
//扫描指定程序集中所有实现了IModuleInitializer接口的类,并调用Initialize方法完成服务注册
builder.Services.RunModuleInitializers(assemblies);

http://www.lryc.cn/news/529521.html

相关文章:

  • deepseek 潜在变量Z的计算;变分自编码器(VAE); 高斯混合模型(GMM)
  • rsync安装与使用-linux015
  • CAP 定理的 P 是什么
  • 【multi-agent-system】ubuntu24.04 安装uv python包管理器及安装依赖
  • JavaScript原型链与继承:优化与扩展的深度探索
  • 5 长度和距离计算模块(length.rs)
  • ollama改模型的存盘目录解决下载大模型报c:盘空间不足的问题
  • OSCP:常见文件传输方法
  • B站吴恩达机器学习笔记
  • Java 性能优化与新特性
  • 【计算机网络】host文件
  • 【C语言】在Windows上为可执行文件.exe添加自定义图标
  • 爬虫基础(五)爬虫基本原理
  • 力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)
  • FFmpeg rtmp推流直播
  • WordPress Icegram Express插件Sql注入漏洞复现(CVE-2024-2876)(附脚本)
  • 重构字符串(767)
  • IO进程线程复习
  • 深入理解Linux内核的虚拟地址到物理地址转换机制及缓存优化
  • 2025年01月29日Github流行趋势
  • yolov11、yolov8部署的7种方法(yolov11、yolov8部署rknn的7种方法),一天一种部署方法,7天入门部署
  • 【ArcGIS遇上Python】批量提取多波段影像至单个波段
  • Node.js MySQL:深度解析与最佳实践
  • wordpress外贸独立站常用询盘软件
  • Kotlin 委托详解
  • Cursor 简介:AI 如何改变编程体验
  • Fiddler(一) - Fiddler简介_fiddler软件
  • 实测数据处理(Wk算法处理)——SAR成像算法系列(十二)
  • P1775 石子合并(弱化版)
  • 一文回顾讲解Java中的集合框架