我正在使用 Qt MetaObject System 进行 DI IoC 开发。
class Resolver
{
public:
template <typename BaseType, typename DerivedType>
void Bind() { ... }
template <typename T>
T* Resolve() { ... }
...
private:
QObject* ResolveByName(QString typeName) { ... }
QHash<QString, QMetaObject> _container;
...
}
Bind 方法存储关于类型的信息_container
,并且Resolve
方法使用这些信息来创建实例。我正在使用QMetaObject::newInstance(QGenericArgumet arg1, QGenericArgumet arg2, ...)
递归构造函数参数解析。例如我们有这样的类:
class IUserService { ... }
class NativeUserService : public IUserService
{
NativeUserService(IUserRepository* userRepository) { ... }
}
客户致电后:
IUserService* userService = resolver.Resolve<IUserService>();
Resolver calls ResolveByName("IUserService*"):
QObject* ResolveByName(Qstring typeName)
{
QMetaObject meta = _container.value(typeName);
...
for (quint8 index = 0; index < 10; index++)
{
...
QString argType = constructorType.parameterTypes().at(index);
QObject *argValue = ResolveByName(argType);
ctorArgs << QGenericArgument(???);
}
...
return meta.newInstance(ctorArgs[0], ctorArgs[1], ...);
}
问题:
如何将meta.newInstance()
结果传递给meta.newInstance()
参数(从转换QObject*
为QGenericArgument
)?