Crates.io | mini_service_locator |
lib.rs | mini_service_locator |
version | 0.1.0 |
source | src |
created_at | 2023-05-12 19:59:42.379585 |
updated_at | 2023-05-12 19:59:42.379585 |
description | A simple Service Locator implementation. |
homepage | https://github.com/emctague/mini_service_locator |
repository | https://github.com/emctague/mini_service_locator |
max_upload_size | |
id | 863256 |
size | 8,254 |
mini_service_locator
provides a simple thread-safe service locator: a container that
stores "service" objects of different types, allowing for retrieval of a service by its type.
use mini_service_locator::ServiceLocator;
struct MyUsefulService {
some_shared_thing: i32
}
let mut locator = ServiceLocator::default();
// Put a MyUsefulService into the locator.
locator.provide(MyUsefulService { some_shared_thing: 24 });
// Later, we can fetch this service.
// If we *don't* use store the resulting service as `mut`, we won't be allowed to write to it.
// We can run get<MyUsefulService> multiple times, and it will always provide the same service.
let mut useful_service = locator.get::<MyUsefulService>().unwrap();
assert_eq!(useful_service.read().some_shared_thing, 24);
useful_service.write().some_shared_thing = 32;
assert_eq!(useful_service.read().some_shared_thing, 32);