首页 > 编程语言 >C#依赖注入

C#依赖注入

时间:2023-09-02 16:33:24浏览次数:21  
标签:依赖 服务 DI C# mailService services 注入 构造函数

namespace WebApplication1
{
    public class 依赖注入
    {
        // 很多的服务都是相互依赖的  .net 的默认 DI 是构造函数注入  默认不支持属性注入
        // DI的生命周期
        // 构造函数注入:在对象创建的时候就把需要的依赖注入
        // 使用邮件发送 MailKit 开源项目
        ServiceCollection services = new ServiceCollection();
        // services.AddScoped<>(服务的接口Iservice,服务的实现方法IML); // 只有这样注册了服务才能使用构造函数的DI 
        //using (var sp = services.BuildServiceProvider())
        //{
        //    // ps:mailService中使用了构造函数引入了日志和配置服务 所以是第一个对象 使用 GetRequireService 注册根对象
        //    // 第一个根对象只能使用 ServiceLocator
        //   var mailService = sp.GetRequireService<MailService>();
        //   mailService.send() ; // 直接调用邮件服务的send 方法
        //}
    }
}

扩展方法的类都是publice static 

DI 是IOC的具体实现 ;IOC 控制反转

可覆盖的配置服务, 配置文件 ,环境变量,配置服务器 ;逐层覆盖 ;

ps:扩展方法的添加 :依据namespace 的可添加性,和在js中的原型上添加方法类似 ;    

第三方的DI容器:Autifac 等,优点:支持属性注入,基于名字注入,基于约定的注入等 ;额外:Ninject ,Spring.Net

如无必要,不要增加实体 ;

标签:依赖,服务,DI,C#,mailService,services,注入,构造函数
From: https://www.cnblogs.com/zhulongxu/p/17673840.html

相关文章

  • 在VSCode上部署CodeWhisperer
    本文介绍了在代码平台VSCode上部署CodeWhisperer插件,使用AI生成相应的代码,帮助我们在日常减少代码的搜索工作0.前期准备准备一个可以收邮件的邮箱地址,本文使用126邮箱1.CodeWhisperer简介AmazonCodeWhisperer是一款由机器学习驱动的通用代码生成器,可为您实时提供代码建议......
  • Lnton 羚通视频分析算法平台【OpenCV-Python】教程: Depth Map from Stereo Images 立
    立体图像的深度图(DepthMap)是表示图像中每个像素点距离相机的深度或距离信息的二维灰度图。它提供了场景中物体的三维结构和距离信息,对于三维重建、增强现实、虚拟现实等应用具有重要意义。深度图可以通过以下方式获取:1.双目视觉方法:使用两个相机(左右摄像机)同时拍摄同一场景,通过计......
  • 【230902-1】如图,▲ABC为等腰直角三角形,A为直角,腰长2倍根号2;D为斜边BC中点,E为直角边AC
    【230902-1】如图,▲ABC为等腰直角三角形,A为直角,腰长2倍根号2;D为斜边BC中点,E为直角边AC中点;F为AD上动点,GE垂直EF,GE=EF;H为BC边上动点,连接HE,B‘是B关于HE的轴对称点。求:B’G的最小值?......
  • D. Sorting By Multiplication
    D.SortingByMultiplicationYouaregivenanarray$a$oflength$n$,consistingofpositiveintegers.Youcanperformthefollowingoperationonthisarrayanynumberoftimes(possiblyzero):choosethreeintegers$l$,$r$and$x$suchthat$1\lel......
  • 学生信息管理系统代码分享 - C语言控制台程序
    【代码要求】   设计与实现学生信息管理系统,实现对学生信息的管理,并且学生的学号是代表该学生信息的唯一性标志。另外学生信息包括:学号、姓名、性别、班级、身份证号、出生日期、联系方式。   该系统具有以下几个功能:   1.系统界面美观、简洁,采用菜单式显示......
  • 泛微E-cology ifNewsCheckOutByCurrentUser.dwr SQL注入漏洞
    漏洞描述泛微E-cology的ifNewsCheckOutByCurrentUser.dwr文件存在SQL注入漏洞。漏洞复现fofa语法:app="泛微-协同办公OA"登录页面如下:POC:POST/dwr/call/plaincall/CptDwrUtil.ifNewsCheckOutByCurrentUser.dwrHTTP/1.1Host:User-Agent:Mozilla/5.0(WindowsNT5.1)A......
  • conda中安装GCC
    一般在linux中gcc都是安装在系统路径下,有的时候需要更换gcc版本但是又没有系统权限,这时候就可以考虑使用conda下集成的gcc。  安装方法:condaconfig--addchannelsconda-forgecondainstallgcc=12   condainstallgcc=12 -c conda-forge      ......
  • aarch64/arm_v8 环境下编译Arcade-Learning-Environment —— ale-py
       condainstallg++=12   cmake../-DCMAKE_BUILD_TYPE=Release-DPYTHON_INCLUDE_DIR=/home/share/xxx/home/software/anaconda3/include-DPYTHON_LIBRARY=/home/share/xxx/home/software/anaconda3/lib/libpython3.11.so-DPython3_EXECUTABLE=/home/share/x......
  • 【ChatGPT答】编程方式(编写计算机程序的方法和范式)
    不同的编程方式,每种都有其特定的语法、结构和应用领域,根据任务需求和个人喜好选择一种或多种结合使用。命令式编程(ImperativeProgramming):最常见的方式之一。通过一系列的命令和状态改变来描述程序的执行过程,需要明确指定每个步骤的执行。常见语言:C、C++、Java和Python。声......
  • Python中Mock和Patch的区别
    在测试并行开发(TPD)中,代码开发是第一位的。尽管如此,我们还是要写出开发的测试,并执行它们来验证代码的准确性(而不是直接运行代码或使用控制台)。在Python中,我们有一个叫做单元测试的过程,里面有mock和patch函数。这篇文章将讨论这两个角色的用途和区别。Mock和Patch对象库的用途......