| Crates.io | ru-di |
| lib.rs | ru-di |
| version | 0.1.4 |
| created_at | 2025-04-15 06:19:25.00008+00 |
| updated_at | 2025-06-05 03:18:45.347406+00 |
| description | A simple and lightweight dependency injection container for Rust |
| homepage | |
| repository | https://github.com/ipconfiger/ru-di |
| max_upload_size | |
| id | 1634000 |
| size | 172,423 |
A simple and lightweight dependency injection container for Rust.
Add this to your Cargo.toml:
[dependencies]
ru-di = "0.1.1"
use ru_di::Di;
// Define your services
struct Database {
port: u16,
}
struct AppService {
db: Database,
}
// Register services
Di::register::<Database, _>(|_| Database { port: 3306 });
Di::register::<AppService, _>(|di| {
let db = di._get::<Database>().unwrap();
AppService { db: db.clone() }
});
// Get service instance
let app = Di::get::<AppService>().unwrap();
assert_eq!(app.db.port, 3306);
use ru_di::Di;
#[derive(Debug, PartialEq)]
struct Configuration {
port: u16,
}
// Register a singleton
Di::register_single(Configuration { port: 8080 });
// Get singleton instance
if let Some(mut config) = Di::get_single::<Configuration>() {
let config = config.get_mut();
assert_eq!(config.port, 8080);
config.port = 8081;
}
// The change persists
if let Some(mut config) = Di::get_single::<Configuration>() {
let config = config.get_mut();
assert_eq!(config.port, 8081);
}
Di::register<T, F>(factory: F) - Register a transient serviceDi::register_single<T>(instance: T) - Register a singleton serviceDi::get<T>() -> Result<T, Box<dyn Error>> - Get a transient service instanceDi::get_single<T>() -> Option<SingleRef<T>> - Get a singleton service instanceAll operations are thread-safe. The container uses Arc, Mutex, and RwLock internally to ensure thread safety.
This project is licensed under the MIT License - see the LICENSE file for details.