Base: Add Services and ServiceProvider
This is intended to be used for intra-module communication. Modules can specify service that are then implemented by other modules. This way we can use features from for example part in Core without relying on the Part module explicitly. Base does provide Service definition - which is basically an abstract class with pure virtual methods. This service then can be implemented in other modules and accessed in runtime via ServiceProvider class that stores all implementations. ServiceProvider does store multiple implementations so in theory it is possible to use it to provide granular implementations. For example, part can provide CenterOfMass service that provides center of mass for part features, mesh can implement another one for meshes and then we can iterate over all implementations and find one that can provide center of
This commit is contained in:
committed by
Chris Hennes
parent
752b5dcf68
commit
aed305da64
31
src/Base/ServiceProvider.cpp
Normal file
31
src/Base/ServiceProvider.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
/****************************************************************************
|
||||
* *
|
||||
* Copyright (c) 2024 Kacper Donat <kacper@kadet.net> *
|
||||
* *
|
||||
* This file is part of FreeCAD. *
|
||||
* *
|
||||
* FreeCAD is free software: you can redistribute it and/or modify it *
|
||||
* under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation, either version 2.1 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* FreeCAD is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||
* Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with FreeCAD. If not, see *
|
||||
* <https://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "ServiceProvider.h"
|
||||
|
||||
Base::ServiceProvider& Base::ServiceProvider::get()
|
||||
{
|
||||
static Base::ServiceProvider instance;
|
||||
return instance;
|
||||
}
|
||||
Reference in New Issue
Block a user