Skip to content

Commit a9531d5

Browse files
KaranChadha10hishamco
authored andcommitted
refactor(service-config): Restructure service registration logic
1 parent fb55a6c commit a9531d5

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

src/SimplCommerce.WebHost/Extensions/ServiceCollectionExtensions.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics;
4+
using System.IdentityModel.Tokens.Jwt;
45
using System.IO;
56
using System.Linq;
67
using System.Net;
@@ -11,21 +12,20 @@
1112
using Microsoft.AspNetCore.Authentication.Cookies;
1213
using Microsoft.AspNetCore.Authentication.JwtBearer;
1314
using Microsoft.AspNetCore.Authentication.OAuth;
14-
using Microsoft.AspNetCore.Identity;
1515
using Microsoft.AspNetCore.Http;
16+
using Microsoft.AspNetCore.Identity;
1617
using Microsoft.AspNetCore.Mvc.ApplicationParts;
17-
using Microsoft.Extensions.Localization;
1818
using Microsoft.EntityFrameworkCore;
1919
using Microsoft.Extensions.Configuration;
2020
using Microsoft.Extensions.DependencyInjection;
21+
using Microsoft.Extensions.Localization;
2122
using SimplCommerce.Infrastructure;
2223
using SimplCommerce.Infrastructure.Modules;
2324
using SimplCommerce.Infrastructure.Web.ModelBinders;
2425
using SimplCommerce.Module.Core.Data;
2526
using SimplCommerce.Module.Core.Extensions;
2627
using SimplCommerce.Module.Core.Models;
2728
using SimplCommerce.WebHost.IdentityServer;
28-
using System.IdentityModel.Tokens.Jwt;
2929

3030
namespace SimplCommerce.WebHost.Extensions
3131
{
@@ -226,6 +226,29 @@ public static IServiceCollection AddCustomizedDataStore(this IServiceCollection
226226
return services;
227227
}
228228

229+
/// <summary>
230+
/// Discovers and configures all modules in the application by finding and initializing their module initializers.
231+
/// </summary>
232+
/// <param name="services">The <see cref="IServiceCollection"/> to add module services to.</param>
233+
/// <returns>The same service collection so that multiple calls can be chained.</returns>
234+
public static IServiceCollection ConfigureModules(this IServiceCollection services)
235+
{
236+
foreach (var module in GlobalConfiguration.Modules)
237+
{
238+
var moduleInitializerType = module.Assembly.GetTypes()
239+
.FirstOrDefault(t => typeof(IModuleInitializer).IsAssignableFrom(t));
240+
241+
if (moduleInitializerType != null && moduleInitializerType != typeof(IModuleInitializer))
242+
{
243+
var moduleInitializer = (IModuleInitializer)Activator.CreateInstance(moduleInitializerType);
244+
services.AddSingleton(typeof(IModuleInitializer), moduleInitializer);
245+
moduleInitializer.ConfigureServices(services);
246+
}
247+
}
248+
249+
return services;
250+
}
251+
229252
private static void TryLoadModuleAssembly(string moduleFolderPath, ModuleInfo module)
230253
{
231254
const string binariesFolderName = "bin";

src/SimplCommerce.WebHost/Program.cs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Linq;
32
using System.Text.Encodings.Web;
43
using System.Text.Unicode;
54
using Microsoft.AspNetCore.Builder;
@@ -48,7 +47,6 @@ void ConfigureService()
4847
builder.Services.AddScoped<SlugRouteValueTransformer>();
4948

5049
builder.Services.AddCustomizedLocalization();
51-
5250
builder.Services.AddCustomizedMvc(GlobalConfiguration.Modules);
5351
builder.Services.Configure<RazorViewEngineOptions>(
5452
options => { options.ViewLocationExpanders.Add(new ThemeableViewLocationExpander()); });
@@ -60,18 +58,7 @@ void ConfigureService()
6058
builder.Services.AddTransient<IRazorViewRenderer, RazorViewRenderer>();
6159
builder.Services.AddAntiforgery(options => options.HeaderName = "X-XSRF-Token");
6260
builder.Services.AddCloudscribePagination();
63-
64-
foreach (var module in GlobalConfiguration.Modules)
65-
{
66-
var moduleInitializerType = module.Assembly.GetTypes()
67-
.FirstOrDefault(t => typeof(IModuleInitializer).IsAssignableFrom(t));
68-
if ((moduleInitializerType != null) && (moduleInitializerType != typeof(IModuleInitializer)))
69-
{
70-
var moduleInitializer = (IModuleInitializer)Activator.CreateInstance(moduleInitializerType);
71-
builder.Services.AddSingleton(typeof(IModuleInitializer), moduleInitializer);
72-
moduleInitializer.ConfigureServices(builder.Services);
73-
}
74-
}
61+
builder.Services.ConfigureModules();
7562

7663
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));
7764

0 commit comments

Comments
 (0)