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

C++中的依赖注入

C++中的依赖注入

在C++中实现依赖注入,可以通过以下方式:

  1. 工厂模式:创建一个工厂类来创建依赖对象。

  2. 构造函数注入:通过类的构造函数传入依赖。

  3. 设值注入:通过设置器(setter)方法传入依赖。

下面是使用工厂模式和构造函数注入实现的一个简单例子:

#include <iostream>

#include <memory>

// 接口

class IDependency {

public:

virtual void Operation() = 0;

virtual ~IDependency() = default;

};

// 实现

class DependencyImpl : public IDependency {

public:

void Operation() override {

std::cout << "Dependency operation." << std::endl;

}

};

// 工厂

class DependencyFactory {

public:

static std::shared_ptr<IDependency> Create() {

return std::make_shared<DependencyImpl>();

}

};

// 使用依赖的类

class MyClass {

private:

std::shared_ptr<IDependency> dependency_;

public:

// 构造函数注入

MyClass(std::shared_ptr<IDependency> dependency) : dependency_(dependency) {}

void Run() {

dependency_->Operation();

}

};

int main() {

// 创建依赖

std::shared_ptr<IDependency> dependency = DependencyFactory::Create();

// 创建使用依赖的类

MyClass myClass(dependency);

// 运行

myClass.Run();

return 0;

}

这个例子中,IDependency是一个接口,DependencyImpl是它的一个实现,DependencyFactory是一个简单的工厂类用来创建依赖对象。MyClass通过构造函数接收一个指向IDependency的智能指针作为依赖注入。在main函数中,我们通过工厂创建了IDependency的实例,并将其注入到MyClass实例中,然后调用Run方法,该方法依赖于注入的IDependency实现。


http://www.kler.cn/a/374682.html

相关文章:

  • Vision - 开源视觉分割算法框架 Grounded SAM2 配置与推理 教程 (1)
  • 「C/C++」C/C++标准库 之 <cstring> 字符串操作库
  • mybatis 参数判断报错的问题
  • Linux笔记--基础入门
  • ZeroNL2SQL:零样本 NL2SQL
  • 渗透测试-百日筑基—SQL注入篇时间注入绕过HTTP数据编码绕过—下
  • 记录一次企业外部通过ssh 连接数据库的事DBeaver
  • Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)
  • Apache paimon表管理
  • 稀土抗菌剂:食品包装中的安全保障
  • Ubuntu 22.04 的Python3.11.8 安装
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——8ResNet模型的使用
  • CCNA对学历有要求吗?看看你是否有资格报考
  • Android OpenGL ES详解——模板Stencil
  • 鸿蒙生态给我们带来的机遇和挑战
  • 【CSS/SCSS】@layer的介绍及使用方法
  • 二百七十六、ClickHouse——Hive和ClickHouse非常不同的DWS指标数据SQL语句
  • NPM 包开发与优化全面指南
  • Resnet50进行迁移学习实现图片二分类
  • vue vxeui 上传组件 vxe-upload 全局配置上传方法,显示上传进度,最完美的配置方案
  • 音视频听译:助力多维度沟通与发展的大门
  • 预告帖|在MATLAB/Simulink中调用C语言的几种方法
  • 【neo4j】 neo4j cypher单一语句 optional 可选操作的技巧
  • 【CSS in Depth 2 精译_055】8.3 伪类 :is() 和 :where() 的正确打开方式
  • JS 字符串拼接并去重
  • Java 判断回文数