Use Standard C++ 11 && CMake.
基于IoC和AoP的快速开发库(C++ Rapid development library based on Inversion of Control And Aspect Oriented Programming Support),配合CMake构建套件开发,支持跨平台开发,并配备了更多的高性能组件.
- 高内聚,低耦合.
- 无任何侵入式代码.
- 超强的通用性以及高度跨平台.
- 实现模块化开发方式便于协作开发.
- 支持Http/WebSocket协议以及WebServer开发
- 基于 IoC
(Inversion of Control)以及 AoP(Aspect Oriented Programming Support).
- 支持灵活配置各个模块.
- 功能模块可高度重用,方便扩展以及维护.
- 使用Json格式配置文件
(*.json)对功能进行模块划分.
只需支持C++11的编译器以及CMake构建工具编译即可, 编译可选项: MySql Zlib SSL.
- Linux
- Gnu构建套件 (跳转在库路径中)
mkdir build && cd build && cmake ../. && make && make install
- Ninja构建套件 (推荐.跳转在库路径中)
mkdir build && cd build && cmake -GNinja ../. && ninja && ninja install
- Win
- VS 20XX
cmake -G "Visual Studio 15 2017"// or Visual Studio xx 20xx
- VS 20XX
-
使用本库工具 Magic/Bin/Create
- 创建项目文件目录名,跳转项目文件目录中
- 使用
Create Test /root/Magic创建项目模板, (Test 项目名) ("/root/Magic" Magic库路径) - 当前目录会生成 CMakeLists.txt Main.cpp Test.json三个文件
-
打开Test.json配置文件,并添加上需要IoC管理的类.
-
对CMakeLists.txt配置文件进行编辑添加Test模块(Test.json)
set(MODULES
${MAGIC}/Modules/Magic.json
${PROJECT_SOURCE_DIR}/Test.json # Test.json 模块
)- 创建并跳转build目录中 调用
cmake ../.并且进行Build. - 打开Main.cpp源文件,添加一下代码.
#include "Test.h" //添加头文件
int main(){
auto application = std::make_shared<Magic::Application>();
application->initialize([](const Safe<Magic::Container>& ioc){
});
return EXIT_SUCCESS;
}- Make Or Ninjia 编译即可
配置文件:Magic模块 (可使用多个配置文件)
.....
本库使用了异常,所有使用异常接口都会有对应 warring 注释标注.
try{
...
}catch(Magic::Failure&){
...
}- 基础用法&演示地址一
- Web服务端&演示地址二
- (未完待续).....
{ // 日志以及配置模块示例 "Configurations":{ "Registered":[ // 类信息注册(强制,必须要具有一个). { "Id":"config", // 类Id标识(任意名). "Class":"Magic::Config", // 类名,如果有namespace,则需加上即可. "IncludePath": "Include/Core/Config.h", // 类所在的文件路径(如何有相同的可以忽略). "Interface":"", // 继承的接口类,通常需要抽象的时候才使用. "Dependencies":[], // 依赖的其他类的类名. "FunctionPropertys":["addConfigFile"] // 需要注册的属性函数. }, { "Id":"configFile", // 与Magic::Config同文件,则不需要在此定义IncludePath "Class":"Magic::ConfigFile", "FunctionPropertys":["addFormatter"] }, ...... ], "Initialize":[ // 初始化(非强制) { "Id":"logger", "InvokeFunctions":{ "externMode":[] // 调用Id: logger 对象的externMode函数 } }, { "Id":"logger", "Loop":true, // Loop 循环加入接口类对象 "Callee":"Magic::ILogAppender", // 接口类类型 若Loop == true则该属性必须具有值. "CalleeFunctions":["addILogAppender"], // 接口类对象添加函数. } ] } }