add library register

This commit is contained in:
王劲鹏 2021-05-17 16:18:44 +08:00 committed by osborn
parent 3b8d76258d
commit eeebb5bfc9
6 changed files with 50 additions and 1 deletions

View File

@ -0,0 +1,13 @@
#ifndef DORIC_H
#define DORIC_H
#include "DoricLibrary.h"
class Doric {
public:
static void registerLibrary(DoricLibrary *doricLibrary) {
DoricRegistry::getInstance()->registerLibrary(doricLibrary);
}
};
#endif // DORIC_H

View File

@ -0,0 +1,11 @@
#ifndef DORICLIBRARY_H
#define DORICLIBRARY_H
#include "DoricRegistry.h"
class DoricLibrary {
public:
virtual void load(DoricRegistry *registry) = 0;
};
#endif // DORICLIBRARY_H

View File

@ -1,4 +1,5 @@
#include "DoricRegistry.h" #include "DoricRegistry.h"
#include "DoricLibrary.h"
#include "plugin/DoricModalPlugin.h" #include "plugin/DoricModalPlugin.h"
#include "plugin/DoricNetworkPlugin.h" #include "plugin/DoricNetworkPlugin.h"
@ -41,3 +42,8 @@ bool DoricRegistry::acquirePluginInfo(QString name) {
bool DoricRegistry::acquireNodeInfo(QString name) { bool DoricRegistry::acquireNodeInfo(QString name) {
return nodes.acquireClass(name); return nodes.acquireClass(name);
} }
void DoricRegistry::registerLibrary(DoricLibrary *doricLibrary) {
doricLibraries.insert(doricLibrary);
doricLibrary->load(this);
}

View File

@ -1,12 +1,27 @@
#ifndef REGISTRY_H #ifndef REGISTRY_H
#define REGISTRY_H #define REGISTRY_H
#include <QDebug>
#include <QString> #include <QString>
#include "utils/DoricObjectFactory.h" #include "utils/DoricObjectFactory.h"
class DoricLibrary;
class DoricRegistry { class DoricRegistry {
private:
static DoricRegistry *local_instance;
~DoricRegistry() { qDebug() << "destructor"; }
public: public:
static DoricRegistry *getInstance() {
static DoricRegistry instance;
return &instance;
}
QSet<DoricLibrary *> doricLibraries;
DoricObjectFactory plugins; DoricObjectFactory plugins;
DoricObjectFactory nodes; DoricObjectFactory nodes;
@ -23,6 +38,8 @@ public:
bool acquirePluginInfo(QString name); bool acquirePluginInfo(QString name);
bool acquireNodeInfo(QString name); bool acquireNodeInfo(QString name);
void registerLibrary(DoricLibrary *doricLibrary);
}; };
#endif // REGISTRY_H #endif // REGISTRY_H

View File

@ -89,9 +89,11 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target !isEmpty(target.path): INSTALLS += target
HEADERS += \ HEADERS += \
Doric.h \
DoricContext.h \ DoricContext.h \
DoricContextManager.h \ DoricContextManager.h \
DoricInterfaceDriver.h \ DoricInterfaceDriver.h \
DoricLibrary.h \
DoricNativeDriver.h \ DoricNativeDriver.h \
DoricPanel.h \ DoricPanel.h \
DoricRegistry.h \ DoricRegistry.h \

View File

@ -11,7 +11,7 @@ class DoricJSEngine : public QObject {
Q_OBJECT Q_OBJECT
private: private:
DoricInterfaceJSE *mJSE; DoricInterfaceJSE *mJSE;
DoricRegistry *mRegistry = new DoricRegistry(); DoricRegistry *mRegistry = DoricRegistry::getInstance();
void loadBuiltinJS(QString assetName); void loadBuiltinJS(QString assetName);
QString packageContextScript(QString contextId, QString content); QString packageContextScript(QString contextId, QString content);