![]() |
BeeeOn Gateway
v2020.3.1-2-g6f737dc
Platform to interconnect the IoT world
|
#include <DependencyInjector.h>
Public Types | |
|
typedef std::map< std::string, DIWrapper * > | WrapperMap |
| typedef std::vector< DIWrapper * > | WrapperVector |
Public Types inherited from BeeeOn::DIFactory | |
|
typedef Poco::SharedPtr < DIFactory > | Ptr |
Public Member Functions | |
| DependencyInjector (Poco::AutoPtr< Poco::Util::AbstractConfiguration > conf, const std::vector< std::string > &libraryPaths={}, bool avoidEarly=false) | |
Public Member Functions inherited from BeeeOn::DIFactory | |
| DIWrapper * | create (const std::string &name, bool detach=false) |
| Create a new instance by name. If detached is true, the memory of the returned DIWrapper pointer MUST be explicitly deleted. Otherwise, each created instance is managed by the DIFactory. | |
| template<typename T > | |
| Poco::SharedPtr< T > | create (const std::string &name, bool detach=false) |
| Create a new instance by name and perform runtime cast to the target type if possible. More... | |
| DIWrapper * | find (const std::string &name) |
| Find an existing instance and return it. More... | |
| template<typename T > | |
| Poco::SharedPtr< T > | find (const std::string &name) |
| Find an existing instance and cast it to the target type if possible. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from BeeeOn::DIFactory | |
| template<typename T > | |
| Poco::SharedPtr< T > | cast (DIWrapper &wrapper) |
| Cast the wrapped instance to the target type. If the cast is not possible, throw an exception. | |
Protected Member Functions inherited from BeeeOn::Loggable | |
| void | setupLogger (Poco::Logger *logger=0) const |
| Poco::Logger & | logger () const |
| Loggable (const ClassInfo &info) | |
| Loggable (const std::type_info &info) | |
Static Protected Member Functions inherited from BeeeOn::Loggable | |
| static Poco::Logger & | forMethod (const char *name) |
| static Poco::Logger & | forClass (const ClassInfo &info) |
| static Poco::Logger & | forClass (const std::type_info &info) |
| template<typename T > | |
| static Poco::Logger & | forInstance (const T *i) |
| static void | configureSimple (Poco::Logger &logger, const std::string &level) |
| static void | logException (Poco::Logger &logger, const Poco::Message::Priority priority, const Poco::Exception &e, const char *file, size_t line) |
DependencyInjector automates creation of application top-level instances and glues them together. It is inspired by the Java framework https://projects.spring.io/spring-framework/ but it is highly simplified for C++ and for the current purposes.
The instances are configured in a configuration file represented by the Poco::AbstractConfiguration. The XMLConfiguration is assumed. DependencyInjector handles tags:
The attributes can contain ${property} strings which are expanded automatically.
No root element or parent entry is considered, so it is usually necessary to pass a sub-configuration removing the initial prefix by AbstractConfiguration::createView.
Example configuration:
<factory>
<instance name="main" class="BeeeOn::Main">
<set name="userService" ref="userService">
<set name="listenPort" number="8080">
<set name="timeout" time="5 s">
<add name="listeners" ref="loginListener">
<add name="listeners" ref="errorListener">
<set name="whitelist" list="192.168.5.5,192.168.15.1">
</instance> <instance name="nameMap" class="BeeeOn::NameMap">
<set name="mapping">
<pair key="first" text="The First One">
<pair key="second" text="The Second One">
</set>
</instance> <instance name="userService" class="BeeeOn::UserService">
<instance name="loginListener" class="BeeeOn::LoginListener">
<instance name="stdoutErrorListener" class="BeeeOn::StdoutErrorListener">
<alias name="errorListener" ref="stdoutErrorListener">
<instance name="plugin" class="BeeeOn::Plugin1" library="plugin">
</factory>DependencyInjector di(config.createView("factory")); Poco::SharedPtr<Main> main = di.create<Main>("main");
1.8.5