1use std::any::Any;
4use std::sync::Arc;
5
6use crate::entry::IServiceResolver;
7use crate::provider::ServiceProvider;
8use crate::scope::Scope;
9use crate::wrapper::ServiceProviderWrapper;
10
11pub trait IProvider: IServiceResolver {
17 fn get_named_any(&self, name: &str) -> Option<Arc<dyn Any + Send + Sync>>;
18 fn rdi_register_named(&self, name: &str, service: Arc<dyn Any + Send + Sync>);
19 fn rdi_remove_named(&self, name: &str);
20}
21
22impl IProvider for ServiceProvider {
23 fn get_named_any(&self, name: &str) -> Option<Arc<dyn Any + Send + Sync>> {
24 ServiceProvider::get_named_any(self, name)
25 }
26 fn rdi_register_named(&self, name: &str, service: Arc<dyn Any + Send + Sync>) {
27 ServiceProvider::rdi_register_named(self, name, service);
28 }
29 fn rdi_remove_named(&self, name: &str) {
30 ServiceProvider::rdi_remove_named(self, name);
31 }
32}
33
34impl IProvider for ServiceProviderWrapper {
35 fn get_named_any(&self, name: &str) -> Option<Arc<dyn Any + Send + Sync>> {
36 ServiceProviderWrapper::get_named_any(self, name)
37 }
38 fn rdi_register_named(&self, name: &str, service: Arc<dyn Any + Send + Sync>) {
39 ServiceProviderWrapper::rdi_register_named(self, name, service);
40 }
41 fn rdi_remove_named(&self, name: &str) {
42 ServiceProviderWrapper::rdi_remove_named(self, name);
43 }
44}
45
46impl IProvider for Scope {
47 fn get_named_any(&self, name: &str) -> Option<Arc<dyn Any + Send + Sync>> {
48 Scope::get_named_any(self, name)
49 }
50 fn rdi_register_named(&self, name: &str, service: Arc<dyn Any + Send + Sync>) {
51 Scope::rdi_register_named(self, name, service);
52 }
53 fn rdi_remove_named(&self, name: &str) {
54 Scope::rdi_remove_named(self, name);
55 }
56}