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

C#对动态加载的DLL进行依赖注入,并对DLL注入服务

文章目录

  • 什么是依赖注入
    • 概念
    • 常用的依赖注入实现
  • 什么是动态加载
    • 定义
    • 示例
  • 对动态加载的DLL进行依赖注入

什么是依赖注入

  • 概念

依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,用于解耦软件组件之间的依赖关系。在 C# 开发中,它主要解决的是类与类之间的强耦合问题。例如,一个类 A 依赖于另一个类 B,如果不使用依赖注入,那么在类 A 内部可能会直接实例化类 B,这就使得类 A 和类 B 紧密地耦合在一起。而依赖注入的方式是将类 B 的实例通过外部(通常是在类 A 的构造函数、属性或者方法参数中)传递给类 A,从而降低它们之间的耦合程度。

  • 作用
    提高可维护性:当系统规模变大时,如果各个组件之间耦合紧密,修改其中一个组件可能会牵一发而动全身。通过依赖注入,组件之间的依赖关系更加清晰,维护起来更加容易。
    方便单元测试:在进行单元测试时,可以方便地模拟依赖对象,而不是依赖于真实的复杂对象,从而使测试更加简单和准确。

常用的依赖注入实现

  • Microsoft.Extensions.DependencyInjection
using Microsoft.Extensions.DependencyInjection;
class MyClassA
{private MyClassB _dependency;public MyClassA(MyClassB dependency){_dependency = dependency;}public void DoSomething()=>_dependency.SomeMethod();
}
class MyClassB
{public void SomeMethod()=>Console.WriteLine("MyClassB's method is called.");
}
class Program
{static void Main(){// 创建服务容器var serviceCollection = new ServiceCollection();// 注册MyClassB为服务,每次请求MyClassB时会创建一个新的实例serviceCollection.AddTransient<MyClassB>();// 注册MyClassA为服务,并且注入MyClassBserviceCollection.AddTransient<MyClassA>();// 构建服务提供器var serviceProvider = serviceCollection.BuildServiceProvider();// 获取MyClassA的实例,此时会自动注入MyClassB的实例var a = serviceProvider.GetService<MyClassA>();a.DoSomething();}
}
  • Autofac
using Autofac;
class MyClassA
{private MyClassB _dependency;public MyClassA(MyClassB dependency){_dependency = dependency;}public void DoSomething
http://www.lryc.cn/news/521629.html

相关文章:

  • HDMI接口
  • A/B 测试:玩转假设检验、t 检验与卡方检验
  • 第143场双周赛:最小可整除数位乘积 Ⅰ、执行操作后元素的最高频率 Ⅰ、执行操作后元素的最高频率 Ⅱ、最小可整除数位乘积 Ⅱ
  • 【STM32】LED状态翻转函数
  • uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
  • 汽车 SOA 架构下的信息安全新问题及对策漫谈
  • Unity-Mirror网络框架-从入门到精通之RigidbodyPhysics示例
  • 小程序如何引入腾讯位置服务
  • H3CNE-12-静态路由(一)
  • 多线程锁
  • ZooKeeper 核心知识全解析:架构、角色、节点与应用
  • 笔记本电脑 选购 回收 特权模式使用 指南
  • 2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一
  • C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。
  • 深度学习核函数
  • Spring MVC流程一张图理解
  • 计算机网络速成
  • spring.profiles.active不同优先级
  • 我这不需要保留本地修改, 只需要拉取远程更改
  • 源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)
  • 深度学习在自动化测试中的创新应用:提升运维效率与质量
  • 单独编译QT子模块
  • 学习华为熵减:激发组织活力(系列之三)
  • CNCF云原生计算基金会
  • STM32 FreeRTOS时间片调度---FreeRTOS任务相关API函数---FreeRTOS时间管理
  • SQL LAST()
  • 云服务信息安全管理体系认证,守护云端安全
  • 【Hive】新增字段(column)后,旧分区无法更新数据问题
  • C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14
  • 4G DTU赋能智能配电环网柜通信运维管理