public override IServiceCollection ConfigureServices(IServiceCollection services) { services.AddHttpClient <RestClientBase>((services, client) => client.BaseAddress = new(services.GetService <IApiConfig>().ApiHost)); services.AddSingleton <IEncryptionService>(services => { if (services.GetRequiredService <IApiConfig>().AzureIdentity is not null) { KeyVaultService kvs = ActivatorUtilities.CreateInstance <KeyVaultService>(services); kvs.InitializeAsync(CancellationToken.None).GetAwaiter().GetResult(); return(kvs); } else { return(ActivatorUtilities.CreateInstance <LocalEncryptionService>(services)); } }); services.AddAuthorizationCore(options => { options.AddPolicy(AuthorizationExtensions.RequireManageGuildPermission, policy => policy .RequireGuildRole(Permissions.ManageGuild)); options.AddPolicy(AuthorizationExtensions.RequireBanMembersPermission, policy => policy .RequireGuildRole(Permissions.BanMembers)); }); services.AddScoped <IAuthorizationHandler, GuildAccessAuthorizationHandler>(); return(services .AddSingleton <GuildTrafficHandler>() .AddSingleton <BroadcastsListener>() .AddSingleton <ComponentInteractionsListener>() .AddSingleton(services => { TrustlistClient client = ActivatorUtilities.CreateInstance <TrustlistClient>(services); client.SetBaseUri(new(services.GetRequiredService <IApiConfig>().ApiHost)); return client; }) .AddSingleton(services => { EmitterClient client = ActivatorUtilities.CreateInstance <EmitterClient>(services); client.SetBaseUri(new(services.GetRequiredService <IApiConfig>().ApiHost)); return client; }) .AddSingleton <ApiAuthService>() .AddSingleton(s => s.GetRequiredService <IInterfaceConfigProvider <IApiConfig> >().InitConfig(PluginManifest.ApiConfigFileName).PopulateApiConfig())); }