1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//! # Dependency Injection Container
//!
//! Provides a centralized container for wiring up all application layers and enabling testability.
//!
//! ## Architecture
//!
//! The DI container follows the Clean Architecture principle of dependency inversion:
//! - Domain layer defines repository traits (abstractions)
//! - Infrastructure layer provides concrete implementations
//! - Application layer use cases receive dependencies via constructor injection
//! - This container wires everything together
//!
//! ## Usage
//!
//! ### Production Setup
//!
//! ```rust,ignore
//! use allsource_core::infrastructure::di::{ServiceContainer, ContainerBuilder};
//!
//! // Build container with in-memory repositories (development)
//! let container = ContainerBuilder::new()
//! .with_in_memory_repositories()
//! .build();
//!
//! // Get a use case with all dependencies injected
//! let register_creator = container.register_creator_use_case();
//! let response = register_creator.execute(request).await?;
//! ```
//!
//! ### Testing with Mocks
//!
//! ```rust,ignore
//! use allsource_core::infrastructure::di::{ServiceContainer, ContainerBuilder};
//!
//! // Build container with custom mock repositories
//! let container = ContainerBuilder::new()
//! .with_creator_repository(Arc::new(MockCreatorRepository::new()))
//! .with_article_repository(Arc::new(MockArticleRepository::new()))
//! .build();
//!
//! // Use cases will receive mock dependencies
//! let use_case = container.register_creator_use_case();
//! ```
pub use ;
pub use ServiceContainer;