use {minfac::{Registered, ServiceCollection}};
let mut collection = ServiceCollection::new();
collection
.with::<Registered<u8>>()
.register(|byte| byte as i16 * 2);
collection.register(|| 1u8);
let provider = collection.build().expect("Configuration is valid");
assert_eq!(Some(2i16), provider.get::<i16>());- Register Types/Traits which are not part of your crate (e.g. std::*). No macros needed.
- Service registration from separately compiled dynamic libraries. see
examples/distributed_simplefor more details - Transient services are retrieved as
Twithout any additional frills, SharedServices asArc<T> - Inheritance instead of scoped services (Service requests can be delegated to parent
ServiceProviders) - Service discovery, (
provider.get_all::<MyService>()returns an iterator, which lazily generates all registeredMyServiceinstances) - Fail fast. When building a
ServiceProviderall registered services are checked to- have all dependencies
- contain no dependency-cycles
- Common pitfalls of traditional IOC are prevented by design
- Singleton services cannot reference scoped services, as scoped services don't exist
- Shared services cannot outlive their
ServiceProvider(checked at runtime when debug_assertions are enabled)
ServiceProviderimplements Send+Sync and is threadsafe without using locks
Visit the examples/documentation for more details
✅ Transient services - New instance per request
✅ Shared services - Shared instance per ServiceProvider
✅ Instance services - Shared instance per ServiceProviderFactory
✅ ServiceProviderFactory for creating ServiceProvider's with minimal overhead
✅ ServiceProviderFactory inherit services from ServiceProvider
⬜ ServiceProviderFactory inherit services from other ServiceProviderFactory
✅ Replaceable strategy for service identification (TypeIds might change between rust versions)
✅ Recursive dependencies check
✅ Missing dependencies check
⬜ Make all structs FFI-Safe
⬜ Remove global Error handler. Use transition from ServiceCollection to ServiceProvider to replace default Error-Hander