c++ - C++ 中的依赖注入(inject)

标签 c++ refactoring dependency-injection

如何在不使用框架或反射的情况下在 C++ 中显式实现依赖注入(inject)?

我可以使用工厂返回 auto_ptr 或 shared_ptr。这是一个好的方法吗?

最佳答案

只需将 shared_ptr 用于您需要的服务,并为其创建一个 setter。例如:

class Engine;

class Car {
public:
    void setEngine(shared_ptr<Engine> p_engine) {
        this->m_engine = p_engine;
    }

    int onAcceleratorPedalStep(int p_gas_pedal_pressure) {
        this->m_engine->setFuelValveIntake(p_gas_pedal_pressure);
        int torque = this->m_engine->getTorque();
        int speed = ... //math to get the car speed from the engine torque
        return speed;
    }

protected:
    shared_ptr<Engine> m_engine;
}

// (now must create an engine and use setEngine when constructing a Car on a factory)

避免使用 auto_ptr,因为您不能通过多个对象共享它(它会在分配时转移所有权)。

关于c++ - C++ 中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060483/

相关文章:

java - Guice:可以注入(inject)模块吗?

ios - 使用 Swinject 将 Model 类实例注入(inject) Swift 中的 View 类实例

c++ - cpp中的字节序转换

c++ - 我听说 i++ 不是线程安全的,++i 是线程安全的吗?

python - 如何重构使用 argparse 的脚本以在另一个 Python 脚本中调用?

java - 如何在不同类型的 ArrayList 中使用相同的方法?

Java:将类名传递给函数

c++ - 清理 `QSettings` 注册表项的最佳方法(Windows 上的 Qt 5)

流运算符的 C++ 部分模板特化

c# - 使用单个接口(interface)注册多个实现