rust-dicore 0.2.6

rust-dicore: A Rust dependency injection framework inspired by Microsoft.Extensions.DependencyInjection
Documentation
mod common;

use rust_dicore::*;
use std::sync::Arc;

#[test]
fn named_service_roundtrip() {
    let p = ServiceCollection::new().build().unwrap();
    let svc = Arc::new(common::MyService { value: 7 });
    p.register_named("my_svc", svc.clone());
    let retrieved: Arc<common::MyService> = p.get_named("my_svc").unwrap();
    assert_eq!(retrieved.value, 7);
    assert!(Arc::ptr_eq(&svc, &retrieved));
}

#[test]
fn named_service_remove() {
    let p = ServiceCollection::new().build().unwrap();
    p.register_named("tmp", Arc::new(common::MyService { value: 1 }));
    p.remove_named("tmp");
    assert!(p.get_named::<common::MyService>("tmp").is_none());
}

#[test]
fn named_service_not_found_returns_none() {
    let p = ServiceCollection::new().build().unwrap();
    assert!(p.get_named::<common::MyService>("nonexistent").is_none());
}

#[test]
fn get_named_any_returns_none_on_missing() {
    let p = ServiceCollection::new().build().unwrap();
    assert!(p.get_named_any("nothing").is_none());
}

#[test]
fn named_survives_scope_drop() {
    let p = Arc::new(ServiceCollection::new().build().unwrap());
    p.register_named("persist", Arc::new(common::MyService { value: 999 }));
    {
        let scope = p.scope();
        let retrieved = scope.get_named_any("persist");
        assert!(retrieved.is_some());
    }
    let still_there: Arc<common::MyService> = p.get_named("persist").unwrap();
    assert_eq!(still_there.value, 999);
}