/// <summary> /// Initialises a new instance of <see cref="TenantResolver"/>. /// </summary> /// <param name="featureStateProvider">The feature state provider.</param> /// <param name="configuration">The configuration.</param> public TenantResolver(IFeatureStateProvider featureStateProvider) { _featureStateProvider = Ensure.IsNotNull(featureStateProvider, nameof(featureStateProvider)); _tenancyFeatureState = featureStateProvider.GetFeatureState(CoreInfo.TenancyFeatureId); _configThunk = new Lazy <TenantsConfiguration>(() => ResolveConfiguration(_tenancyFeatureState.ConfigurationSection)); }
/// <summary> /// Initialises a new instance of <see cref="FeatureFactory{TService}"/> /// </summary> /// <param name="featureStateProvider">The feature state provider.</param> public FeatureFactory(IFeatureStateProvider featureStateProvider, IWorkContext workContext) { _featureStateProvider = Ensure.IsNotNull(featureStateProvider, nameof(featureStateProvider)); _workContext = Ensure.IsNotNull(workContext, nameof(workContext)); }
/// <summary> /// Adds the set of feature services to the collection. /// </summary> /// <param name="services">The set of services.</param> /// <param name="featureProvider">The feature provider.</param> /// <param name="featureStateProvider">The feature state provider.</param> /// <returns>The set of services.</returns> public static IServiceCollection AddFeatureServices(this IServiceCollection services, IFeatureProvider featureProvider, IFeatureStateProvider featureStateProvider) { Ensure.IsNotNull(services, nameof(services)); Ensure.IsNotNull(featureProvider, nameof(featureProvider)); Ensure.IsNotNull(featureStateProvider, nameof(featureStateProvider)); services.AddSingleton(featureProvider); services.AddSingleton(featureStateProvider); foreach (var feature in featureProvider.Features) { if (feature is IServicesBuilder builder) { var featureServices = new ServiceCollection(); builder.BuildServices(featureServices); foreach (var descriptor in featureServices) { services.Add(descriptor); services.Add(CreateFeatureServiceDescriptor(descriptor, feature)); } } } return(services); }
/// <summary> /// Initialises a new instance of <see cref="FeatureInitialiserStartupFilter"/>. /// </summary> /// <param name="serviceProvider">The service provider.</param> /// <param name="featureProvider">The feature provider.</param> /// <param name="featureStateProvider">The feature state provider.</param> public FeatureInitialiserStartupFilter(IServiceProvider serviceProvider, IFeatureProvider featureProvider, IFeatureStateProvider featureStateProvider) { _serviceProvider = Ensure.IsNotNull(serviceProvider, nameof(serviceProvider)); _featureProvider = Ensure.IsNotNull(featureProvider, nameof(featureProvider)); _featureStateProvider = Ensure.IsNotNull(featureStateProvider, nameof(featureStateProvider)); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, IModuleProvider moduleProvider, IFeatureProvider featureProvider, IFeatureStateProvider featureStateProvider) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } foreach (var module in moduleProvider.Modules) { Console.WriteLine($"Module: {module.Id}"); } foreach (var feature in featureProvider.Features) { if ((featureStateProvider.GetFeatureState(feature.Id)?.Enabled).GetValueOrDefault(false)) { Console.WriteLine($"Feature: {feature.Id}"); } } app.Run(async(context) => { Console.WriteLine($"Executing for {context.Request.Path}"); var feature1 = context.RequestServices.GetRequiredService <IFeature <IAppService> >(); var feature2 = context.RequestServices.GetRequiredService <IFeature <IAppService, AppFeatureConfiguration> >(); if (feature1.Enabled) { feature1.Service.DoAction(); } if (feature2.Enabled) { feature2.Service.DoAction(feature2.Configuration); } var tenantService = context.RequestServices.GetRequiredService <ITenantService>(); tenantService.DoAction(); }); }