pub struct BeanContainer { /* private fields */ }Implementations§
Source§impl BeanContainer
impl BeanContainer
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
examples/basic.rs (line 59)
57fn main() -> Result<(), String> {
58 // Create container
59 let container = BeanContainer::new();
60
61 // Register Database (Singleton)
62 container.register::<Database, _>(Scope::Singleton, |_deps| {
63 Ok(Database::new(
64 "postgresql://localhost:5432/mydb".to_string(),
65 ))
66 })?;
67
68 // Register UserService (Singleton)
69 container.register::<UserService, _>(Scope::Singleton, |deps| {
70 let db = deps.get::<Database>()?;
71 Ok(UserService::new(db))
72 })?;
73
74 // Register OrderService (Singleton)
75 container.register::<OrderService, _>(Scope::Singleton, |deps| {
76 let db = deps.get::<Database>()?;
77 let user_service = deps.get::<UserService>()?;
78 Ok(OrderService::new(db, user_service))
79 })?;
80
81 println!("\n=== Get and use OrderService ===");
82 let order_service = container.get::<OrderService>();
83 order_service.create_order(1, "Laptop");
84
85 println!("\n=== Get OrderService again (should reuse singleton) ===");
86 let order_service2 = container.get::<OrderService>();
87 order_service2.create_order(2, "Phone");
88
89 println!("\n=== Verify same instance ===");
90 println!(
91 "Same instance: {}",
92 Arc::ptr_eq(&order_service, &order_service2)
93 );
94
95 Ok(())
96}Sourcepub fn register<T, F>(&self, scope: Scope, factory: F) -> Result<(), String>
pub fn register<T, F>(&self, scope: Scope, factory: F) -> Result<(), String>
Examples found in repository?
examples/basic.rs (lines 62-66)
57fn main() -> Result<(), String> {
58 // Create container
59 let container = BeanContainer::new();
60
61 // Register Database (Singleton)
62 container.register::<Database, _>(Scope::Singleton, |_deps| {
63 Ok(Database::new(
64 "postgresql://localhost:5432/mydb".to_string(),
65 ))
66 })?;
67
68 // Register UserService (Singleton)
69 container.register::<UserService, _>(Scope::Singleton, |deps| {
70 let db = deps.get::<Database>()?;
71 Ok(UserService::new(db))
72 })?;
73
74 // Register OrderService (Singleton)
75 container.register::<OrderService, _>(Scope::Singleton, |deps| {
76 let db = deps.get::<Database>()?;
77 let user_service = deps.get::<UserService>()?;
78 Ok(OrderService::new(db, user_service))
79 })?;
80
81 println!("\n=== Get and use OrderService ===");
82 let order_service = container.get::<OrderService>();
83 order_service.create_order(1, "Laptop");
84
85 println!("\n=== Get OrderService again (should reuse singleton) ===");
86 let order_service2 = container.get::<OrderService>();
87 order_service2.create_order(2, "Phone");
88
89 println!("\n=== Verify same instance ===");
90 println!(
91 "Same instance: {}",
92 Arc::ptr_eq(&order_service, &order_service2)
93 );
94
95 Ok(())
96}pub fn register_named<T, F>( &self, name: &str, scope: Scope, factory: F, ) -> Result<(), String>
Sourcepub fn get<T: Any + Send + Sync + 'static>(&self) -> Arc<T> ⓘ
pub fn get<T: Any + Send + Sync + 'static>(&self) -> Arc<T> ⓘ
Get bean by type NOTE: panics if bean not found
Examples found in repository?
examples/basic.rs (line 82)
57fn main() -> Result<(), String> {
58 // Create container
59 let container = BeanContainer::new();
60
61 // Register Database (Singleton)
62 container.register::<Database, _>(Scope::Singleton, |_deps| {
63 Ok(Database::new(
64 "postgresql://localhost:5432/mydb".to_string(),
65 ))
66 })?;
67
68 // Register UserService (Singleton)
69 container.register::<UserService, _>(Scope::Singleton, |deps| {
70 let db = deps.get::<Database>()?;
71 Ok(UserService::new(db))
72 })?;
73
74 // Register OrderService (Singleton)
75 container.register::<OrderService, _>(Scope::Singleton, |deps| {
76 let db = deps.get::<Database>()?;
77 let user_service = deps.get::<UserService>()?;
78 Ok(OrderService::new(db, user_service))
79 })?;
80
81 println!("\n=== Get and use OrderService ===");
82 let order_service = container.get::<OrderService>();
83 order_service.create_order(1, "Laptop");
84
85 println!("\n=== Get OrderService again (should reuse singleton) ===");
86 let order_service2 = container.get::<OrderService>();
87 order_service2.create_order(2, "Phone");
88
89 println!("\n=== Verify same instance ===");
90 println!(
91 "Same instance: {}",
92 Arc::ptr_eq(&order_service, &order_service2)
93 );
94
95 Ok(())
96}Sourcepub fn get_named<T: Any + Send + Sync + 'static>(&self, name: &str) -> Arc<T> ⓘ
pub fn get_named<T: Any + Send + Sync + 'static>(&self, name: &str) -> Arc<T> ⓘ
Get named bean by type NOTE: panics if bean not found
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for BeanContainer
impl RefUnwindSafe for BeanContainer
impl Send for BeanContainer
impl Sync for BeanContainer
impl Unpin for BeanContainer
impl UnsafeUnpin for BeanContainer
impl UnwindSafe for BeanContainer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more