Example #1
0
        private void CreateServiceProvider()
        {
            var services = new ServiceCollection();

            services.AddSingleton(_hostingEnvironment);
            services.AddSingleton(_hostBuilderContext);
            services.AddSingleton(_appConfiguration);
            services.AddSingleton <IApplicationLifetime, ApplicationLifetime>();
            services.AddSingleton <IHostLifetime, ConsoleLifetime>();
            services.AddSingleton <IHost, Internal.Host>();
            services.AddOptions();
            services.AddLogging();

            foreach (var configureServicesAction in _configureServicesActions)
            {
                configureServicesAction(_hostBuilderContext, services);
            }

            var containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (var containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(_hostBuilderContext, containerBuilder);
            }

            _appServices = _serviceProviderFactory.CreateServiceProvider(containerBuilder);

            if (_appServices == null)
            {
                throw new InvalidOperationException($"The IServiceProviderFactory returned a null IServiceProvider.");
            }
        }
Example #2
0
        private void InitializeServiceProvider()
        {
            var services = new ServiceCollection();

            PopulateServiceCollection(
                services,
                _hostBuilderContext !,
                _hostingEnvironment !,
                _defaultProvider !,
                _appConfiguration !,
                () => _appServices !);

            foreach (Action <HostBuilderContext, IServiceCollection> configureServicesAction in _configureServicesActions)
            {
                configureServicesAction(_hostBuilderContext !, services);
            }

            object containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (IConfigureContainerAdapter containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(_hostBuilderContext !, containerBuilder);
            }

            _appServices = _serviceProviderFactory.CreateServiceProvider(containerBuilder);
        }
Example #3
0
        private void CreateServiceProvider()
        {
            var services = new ServiceCollection();

#pragma warning disable CS0618 // Type or member is obsolete
            services.AddSingleton <IHostingEnvironment>(_hostingEnvironment);
#pragma warning restore CS0618 // Type or member is obsolete
            services.AddSingleton <IHostEnvironment>(_hostingEnvironment);
            services.AddSingleton(_hostBuilderContext);
            // register configuration as factory to make it dispose with the service provider
            services.AddSingleton(_ => _appConfiguration);
#pragma warning disable CS0618 // Type or member is obsolete
            services.AddSingleton <IApplicationLifetime>(s => (IApplicationLifetime)s.GetService <IHostApplicationLifetime>());
#pragma warning restore CS0618 // Type or member is obsolete
            services.AddSingleton <IHostApplicationLifetime, ApplicationLifetime>();

            AddLifetime(services);

            services.AddSingleton <IHost>(_ =>
            {
                return(new Internal.Host(_appServices,
                                         _hostingEnvironment,
                                         _defaultProvider,
                                         _appServices.GetRequiredService <IHostApplicationLifetime>(),
                                         _appServices.GetRequiredService <ILogger <Internal.Host> >(),
                                         _appServices.GetRequiredService <IHostLifetime>(),
                                         _appServices.GetRequiredService <IOptions <HostOptions> >()));
            });
            services.AddOptions().Configure <HostOptions>(options => { options.Initialize(_hostConfiguration); });
            services.AddLogging();

            foreach (Action <HostBuilderContext, IServiceCollection> configureServicesAction in _configureServicesActions)
            {
                configureServicesAction(_hostBuilderContext, services);
            }

            object containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (IConfigureContainerAdapter containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(_hostBuilderContext, containerBuilder);
            }

            _appServices = _serviceProviderFactory.CreateServiceProvider(containerBuilder);

            if (_appServices == null)
            {
                throw new InvalidOperationException(SR.NullIServiceProvider);
            }

            // resolve configuration explicitly once to mark it as resolved within the
            // service provider, ensuring it will be properly disposed with the provider
            _ = _appServices.GetService <IConfiguration>();
        }
Example #4
0
        IServiceProvider ConfigureContainerAndGetProvider(IServiceCollection services)
        {
            object containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (IConfigureContainerAdapter containerAction in _configureContainerActions)
            {
                if (_hostBuilderContext != null)
                {
                    containerAction.ConfigureContainer(_hostBuilderContext, containerBuilder);
                }
            }

            return(_serviceProviderFactory.CreateServiceProvider(containerBuilder));
        }
Example #5
0
        IServiceProvider ConfigureContainerAndGetProvider(IServiceCollection services)
        {
            if (_hostBuilderContext == null)
            {
                throw new InvalidOperationException($"The HostBuilderContext was not set.");
            }

            object containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (IConfigureContainerAdapter containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(_hostBuilderContext, containerBuilder);
            }

            return(_serviceProviderFactory.CreateServiceProvider(containerBuilder));
        }
Example #6
0
        private void CreateServiceProvider()
        {
            var services = new ServiceCollection();

#pragma warning disable CS0618 // Type or member is obsolete
            services.AddSingleton <IHostingEnvironment>(_hostingEnvironment);
#pragma warning restore CS0618 // Type or member is obsolete
            services.AddSingleton <IHostEnvironment>(_hostingEnvironment);
            services.AddSingleton(_hostBuilderContext);
            // register configuration as factory to make it dispose with the service provider
            services.AddSingleton(_ => _appConfiguration);
#pragma warning disable CS0618 // Type or member is obsolete
            services.AddSingleton <IApplicationLifetime>(s => (IApplicationLifetime)s.GetService <IHostApplicationLifetime>());
#pragma warning restore CS0618 // Type or member is obsolete
            services.AddSingleton <IHostApplicationLifetime, ApplicationLifetime>();
            services.AddSingleton <IHostLifetime, ConsoleLifetime>();
            services.AddSingleton <IHost, Internal.Host>();
            services.AddOptions();
            services.AddLogging();

            foreach (var configureServicesAction in _configureServicesActions)
            {
                configureServicesAction(_hostBuilderContext, services);
            }

            var containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (var containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(_hostBuilderContext, containerBuilder);
            }

            _appServices = _serviceProviderFactory.CreateServiceProvider(containerBuilder);

            if (_appServices == null)
            {
                throw new InvalidOperationException($"The IServiceProviderFactory returned a null IServiceProvider.");
            }

            // resolve configuration explicitly once to mark it as resolved within the
            // service provider, ensuring it will be properly disposed with the provider
            _ = _appServices.GetService <IConfiguration>();
        }
Example #7
0
        private IServiceProvider CreateServiceProvider(ServiceCollection services)
        {
            foreach (Action <IServiceCollection> configureServicesAction in _configureServicesActions)
            {
                configureServicesAction(services);
            }

            services.TryAddSingleton <IOptionFallbackProvider, EnvironmentVariableFallbackProvider>();
            services.TryAddScoped <ICliExceptionHandler, DefaultExceptionHandler>();
            services.TryAddScoped <IHelpWriter, DefaultHelpWriter>();

            object?containerBuilder = _serviceProviderAdapter.CreateBuilder(services);

            foreach (IConfigureContainerAdapter containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(containerBuilder);
            }

            IServiceProvider?appServices = _serviceProviderAdapter.CreateServiceProvider(containerBuilder);

            return(appServices ?? throw new InvalidOperationException($"{nameof(IServiceFactoryAdapter)} returned a null instance of object implementing {nameof(IServiceProvider)}."));
        }
Example #8
0
        private void CreateServiceProvider()
        {
            var services = new ServiceCollection();

            services.AddSingleton(_hostEnvironment);
            services.AddSingleton(_hostBuilderContext);
            services.AddSingleton(_appConfiguration);
            services.AddSingleton <IHostApplicationLifetime, ApplicationLifetime>();
            services.AddSingleton <IHostLifetime, XamarinHostLifetime>();
            services.AddSingleton <IXamarinHost, XamarinHost>();
            services.AddSingleton <XamarinNavigationProxy>();
            services.AddSingleton <INavigation>(sp => sp.GetRequiredService <XamarinNavigationProxy>());
            services.AddSingleton <INavigationProxyBuilder, NavigationProxyBuilder>();
            services.AddSingleton <IExtendedNavigationBuilder, NavigationBuilder>();

            services.AddOptions();
            services.AddLogging();

            foreach (var configureServicesAction in _configureServicesActions)
            {
                configureServicesAction(_hostBuilderContext, services);
            }

            var startup = services.BuildServiceProvider().GetService <IXamarinStartup>();

            if (startup != null)
            {
                startup.ConfigureServices(_hostBuilderContext, services);
            }

            var containerBuilder = _serviceProviderFactory.CreateBuilder(services);

            foreach (var containerAction in _configureContainerActions)
            {
                containerAction.ConfigureContainer(_hostBuilderContext, containerBuilder);
            }

            // If no navigation root has been configured, then set it to the application
            services.TryAddSingleton <XamarinNavigationRootDelegate>(sp => () => sp.GetRequiredService <XamarinApplicationDelegate>()());

            _appServices = _serviceProviderFactory.CreateServiceProvider(containerBuilder);

            if (_appServices == null)
            {
                throw new InvalidOperationException($"The IServiceProviderFactory returned a null IServiceProvider.");
            }

            if (_appServices.GetRequiredService <IXamarinHostingPlatform>() == null)
            {
                throw new InvalidOperationException($"Please register an instance of {nameof(IXamarinHostingPlatform)}, this can be done using the {nameof(IXamarinHostBuilder)}.{nameof(XamarinHostBuilderExtensions.UsePlatform)} extension method");
            }

            if (_appServices.GetRequiredService <XamarinApplicationDelegate>() == null)
            {
                throw new InvalidOperationException($"Please register an instance of your application, this can be done using the {nameof(IXamarinHostBuilder)}.{nameof(XamarinHostBuilderExtensions.UseApplication)} extension method");
            }

            var navigationBuilder = _appServices.GetRequiredService <IExtendedNavigationBuilder>();

            foreach (var navigationAction in _configureNavigationConfigActions)
            {
                navigationAction(_hostBuilderContext, _appServices, navigationBuilder);
            }

            navigationBuilder.Build();
        }