12#ifndef ARCANE_SERVICEFINDER2_H
13#define ARCANE_SERVICEFINDER2_H
17#include "arcane/utils/String.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/Collection.h"
20#include "arcane/utils/Enumerator.h"
22#include "arcane/IServiceInfo.h"
23#include "arcane/IFactoryService.h"
24#include "arcane/IApplication.h"
25#include "arcane/IServiceFactory.h"
26#include "arcane/IServiceMng.h"
27#include "arcane/ServiceBuildInfo.h"
28#include "arcane/ServiceInstance.h"
47template<
typename InterfaceType>
54 : m_application(
app), m_service_build_info_base(
sbi)
68 ARCCORE_DEPRECATED_2019(
"Use createReference() instead")
71 return _create(name,m_service_build_info_base);
81 return _createReference(name,m_service_build_info_base);
94 ARCCORE_DEPRECATED_2019(
"Use createReference() instead")
132 for(
typename SingletonServiceInstanceCollection::Enumerator i(
singleton_services); ++i; ){
135 for(
typename ServiceInstanceCollection::Enumerator
k(
ssi->interfaceInstances()); ++
k; ){
139 return m->instance().get();
153 ARCCORE_DEPRECATED_2019(
"Use createAll(Array<ServiceRef<InterfaceType>>&) instead")
156 _createAll(
instances,m_service_build_info_base);
164 return _createAll(m_service_build_info_base);
172 for(
typename ServiceFactory2Collection::Enumerator
j(this->m_application->
serviceFactories2()); ++
j; ){
180 return m_factories.constView();
183 void getServicesNames(Array<String>& names)
const
185 for(
typename ServiceFactory2Collection::Enumerator j(this->m_application->
serviceFactories2()); ++j; ){
186 IServiceFactory2* sf2 = *j;
187 IServiceFactory2T<InterfaceType>* true_factory =
dynamic_cast< IServiceFactory2T<InterfaceType>*
>(sf2);
190 names.add(si->localName());
197 InterfaceType* _create(
const String& name,
const ServiceBuildInfoBase& sbib)
199 return _createReference(name,sbib).
_release();
202 Ref<InterfaceType> _createReference(
const String& name,
const ServiceBuildInfoBase& sbib)
204 for(
typename ServiceFactory2Collection::Enumerator j(this->m_application->
serviceFactories2()); ++j; ){
205 Internal::IServiceFactory2* sf2 = *j;
206 IServiceInfo* s = sf2->serviceInfo();
207 if (s->localName()!=name)
209 IServiceFactory2T<InterfaceType>* m =
dynamic_cast< IServiceFactory2T<InterfaceType>*
>(sf2);
212 Ref<InterfaceType> tt = m->createServiceReference(sbib);
220 void _createAll(Array<InterfaceType*>& instances,
const ServiceBuildInfoBase& sbib)
222 UniqueArray<Ref<InterfaceType>> ref_instances = _createAll(sbib);
223 for(
auto& x : ref_instances )
224 instances.
add(x._release());
227 UniqueArray<Ref<InterfaceType>> _createAll(
const ServiceBuildInfoBase& sbib)
229 UniqueArray<Ref<InterfaceType>> instances;
230 for(
typename ServiceFactory2Collection::Enumerator j(this->m_application->
serviceFactories2()); ++j; ){
231 Internal::IServiceFactory2* sf2 = *j;
232 IServiceFactory2T<InterfaceType>* m =
dynamic_cast< IServiceFactory2T<InterfaceType>*
>(sf2);
234 Ref<InterfaceType> tt = m->createServiceReference(sbib);
245 IApplication* m_application;
246 ServiceBuildInfoBase m_service_build_info_base;
262template<
typename InterfaceType,
typename ParentType>
Tableau d'items de types quelconques.
Interface de l'application.
virtual ServiceFactory2Collection serviceFactories2()=0
Liste des fabriques de service.
virtual IServiceMng * serviceMng() const =0
Gestionnaire de services.
Interface d'une instance d'un service.
Interface du gestionnaire de services.
Interface d'une instance de service singleton.
Interface du gestionnaire d'un sous-domaine.
virtual IServiceInfo * serviceInfo() const =0
Retourne le IServiceInfo associé à cette fabrique.
Classe utilitaire pour retrouver un ou plusieurs services implémentant l'interface InterfaceType.
virtual InterfaceType * create(const String &name)
Créé une instance du service name.
virtual UniqueArray< Ref< InterfaceType > > createAll()
Créé une instance de chaque service qui implémente InterfaceType.
virtual InterfaceType * getSingleton()
Instance singleton du service ayant pour interface InterfaceType.
virtual Ref< InterfaceType > createReference(const String &name, IMesh *mesh)
Créé une instance du service name pour le maillage mesh.
virtual Ref< InterfaceType > createReference(const String &name)
Créé une instance du service name.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Informations pour créer un service.
IBase * serviceParent() const
Accès à l'instance parente qui a créée cette instance.
ISubDomain * subDomain() const
Accès au ISubDomain associé.
Classe utilitaire pour retrouver un ou plusieurs services implémentant l'interface InterfaceType.
InstanceType * _release()
Libère le pointeur du compteur de référence sans le détruire. Cela n'est autorisé que si l'implémenta...
Chaîne de caractères unicode.
void add(ArrayView< T > lhs, ConstArrayView< T > copy_array)
Ajoute le tableau copy_array dans l'instance.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-