80 lines
2.4 KiB
C#
80 lines
2.4 KiB
C#
using System.Globalization;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
using DysonNetwork.Shared.Cache;
|
|
using DysonNetwork.Shared.GeoIp;
|
|
using NodaTime;
|
|
using NodaTime.Serialization.SystemTextJson;
|
|
|
|
namespace DysonNetwork.Zone.Startup;
|
|
|
|
public static class ServiceCollectionExtensions
|
|
{
|
|
public static IServiceCollection AddAppServices(this IServiceCollection services)
|
|
{
|
|
services.AddLocalization(options => options.ResourcesPath = "Resources");
|
|
|
|
services.AddDbContext<AppDatabase>();
|
|
services.AddSingleton<IClock>(SystemClock.Instance);
|
|
services.AddHttpContextAccessor();
|
|
services.AddSingleton<ICacheService, CacheServiceRedis>();
|
|
|
|
services.AddHttpClient();
|
|
|
|
services
|
|
.AddControllers()
|
|
.AddJsonOptions(options =>
|
|
{
|
|
options.JsonSerializerOptions.NumberHandling =
|
|
JsonNumberHandling.AllowNamedFloatingPointLiterals;
|
|
options.JsonSerializerOptions.PropertyNamingPolicy =
|
|
JsonNamingPolicy.SnakeCaseLower;
|
|
|
|
options.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
|
|
});
|
|
services.AddRazorPages();
|
|
|
|
services.AddGrpc(options =>
|
|
{
|
|
options.EnableDetailedErrors = true;
|
|
});
|
|
services.AddGrpcReflection();
|
|
|
|
services.Configure<RequestLocalizationOptions>(options =>
|
|
{
|
|
var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("zh-Hans") };
|
|
|
|
options.SupportedCultures = supportedCultures;
|
|
options.SupportedUICultures = supportedCultures;
|
|
});
|
|
|
|
services.AddHostedService<BroadcastEventHandler>();
|
|
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddAppAuthentication(this IServiceCollection services)
|
|
{
|
|
services.AddAuthorization();
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddAppFlushHandlers(this IServiceCollection services)
|
|
{
|
|
services.AddSingleton<FlushBufferService>();
|
|
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddAppBusinessServices(
|
|
this IServiceCollection services,
|
|
IConfiguration configuration
|
|
)
|
|
{
|
|
services.Configure<GeoIpOptions>(configuration.GetSection("GeoIP"));
|
|
services.AddScoped<GeoIpService>();
|
|
|
|
return services;
|
|
}
|
|
}
|