ferroui_splat/service_location/
service_location_initialization.rs1use super::app_locator::AppLocator;
4use super::dependency_resolver::{IMutableDependencyResolver, MutableDependencyResolverExt};
5use crate::application_performance_monitoring::{
6 DefaultFeatureUsageTrackingManager, IFeatureUsageTrackingManager,
7};
8use crate::logging::{DebugLogger, DefaultLogManager, ILogManager, ILogger};
9use std::rc::Rc;
10
11pub fn initialize_splat<R: IMutableDependencyResolver + ?Sized>(resolver: &R) {
16 register_default_log_manager(resolver);
17 register_logger(resolver);
18 register_application_performance_monitoring(resolver);
19}
20
21fn register_application_performance_monitoring<R: IMutableDependencyResolver + ?Sized>(resolver: &R) {
22 if resolver.has_registration::<dyn IFeatureUsageTrackingManager>() {
23 return;
24 }
25 resolver.register_constant::<dyn IFeatureUsageTrackingManager>(Rc::new(
26 DefaultFeatureUsageTrackingManager::new(),
27 ));
28}
29
30fn register_default_log_manager<R: IMutableDependencyResolver + ?Sized>(resolver: &R) {
31 if resolver.has_registration::<dyn ILogManager>() {
32 return;
33 }
34 resolver.register::<dyn ILogManager>(|| {
35 Some(Rc::new(DefaultLogManager::new(AppLocator::current())) as Rc<dyn ILogManager>)
36 });
37}
38
39fn register_logger<R: IMutableDependencyResolver + ?Sized>(resolver: &R) {
40 if resolver.has_registration::<dyn ILogger>() {
41 return;
42 }
43 resolver.register_constant::<dyn ILogger>(Rc::new(DebugLogger::new()));
44}
45
46pub trait ServiceLocationInitializationExt {
48 fn initialize_splat(&self);
50}
51
52impl<R: IMutableDependencyResolver + ?Sized> ServiceLocationInitializationExt for R {
53 fn initialize_splat(&self) {
54 initialize_splat(self);
55 }
56}