Skip to main content

ferroui_dependency_injection/
default_service_provider_factory.rs

1//! `DefaultServiceProviderFactory.cs` and `IServiceProviderFactory.cs`.
2use crate::*;
3
4pub trait IServiceProviderFactory<TContainerBuilder> {
5    fn create_builder(&self, services: ServiceCollection) -> TContainerBuilder;
6    fn create_service_provider(&self, builder: TContainerBuilder)
7        -> ServiceResult<ServiceProvider>;
8}
9
10#[derive(Clone, Copy, Debug, Default)]
11pub struct DefaultServiceProviderFactory {
12    options: ServiceProviderOptions,
13}
14impl DefaultServiceProviderFactory {
15    pub fn new(options: ServiceProviderOptions) -> Self {
16        Self { options }
17    }
18}
19impl IServiceProviderFactory<ServiceCollection> for DefaultServiceProviderFactory {
20    fn create_builder(&self, services: ServiceCollection) -> ServiceCollection {
21        services
22    }
23    fn create_service_provider(
24        &self,
25        builder: ServiceCollection,
26    ) -> ServiceResult<ServiceProvider> {
27        builder.build_service_provider(self.options)
28    }
29}