C++ 当外部依赖项在对象生命周期中不断变化时,如何设计依赖项注入?

C++ 当外部依赖项在对象生命周期中不断变化时,如何设计依赖项注入?,c++,dependency-injection,factory,C++,Dependency Injection,Factory,我正在设计一个新类,我们称之为SocketsManager。它的外部依赖项是Socket,一个专门用于SocketTCP或SocketUDP的抽象类。SocketManager是一个长时间运行的线程,用于管理系统范围的套接字打开、运行状况、关闭等 class SocketManager { SocketManager(vector<Socket*> sockets); ~SocketManager(); openSockets(); closeSoc

我正在设计一个新类,我们称之为SocketsManager。它的外部依赖项是Socket,一个专门用于SocketTCP或SocketUDP的抽象类。SocketManager是一个长时间运行的线程,用于管理系统范围的套接字打开、运行状况、关闭等

class SocketManager {
    SocketManager(vector<Socket*> sockets);
    ~SocketManager();

    openSockets();
    closeSockets();

    vector<Socket*> sockets;
}
类SocketManager{
SocketManager(向量套接字);
~SocketManager();
openSockets();
闭合插座();
向量插座;
}
我计划通过SocketManager的构造函数注入套接字向量

问题是,套接字会根据系统配置不时更改。我可能会在构建时注入5个套接字,但过一段时间——由于配置更改,我的系统需要8个套接字。现在如何再传入3个插座

这让我想到SocketManager本身应该定期监视系统配置,确定套接字需求,并能够请求更多套接字

这将需要SocketFactory而不是构造函数注入。但是,我必须将SocketFactory传递给SocketManager(而不是直接传递资源),让SocketFactory成为单例或使用静态方法SocketFactory::getSocket(),以避免工厂对象实例化,等等。这些会使设计复杂化,因此如果可能的话,我会尽量避免


有什么常识吗?关于如何在需求不断变化的情况下处理DI?

您的总体想法是正确的,但只需将
SocketFactory
a
std::function
,让注入器担心它是一个单例/对象/函数/任何东西。谢谢Frank,这是一个好主意!我使用函数指针寻找一个优雅的解决方案。