Преглед изворни кода

Reduce duplication in API client setup

Robert Marshall пре 3 година
родитељ
комит
cd9d57a875
1 измењених фајлова са 11 додато и 20 уклоњено
  1. 11 20
      src/Website/Startup.cs

+ 11 - 20
src/Website/Startup.cs

@@ -32,26 +32,17 @@ namespace Website
 
 			services.AddSingleton(Configuration.GetSection("cacheDurations").Get<CacheDurations>());
 
-			services.AddHttpClient<IGitApi, GitApi>(client => {
-				client.BaseAddress = new Uri(Configuration["gitApiEndpoint"]);
-				client.DefaultRequestHeaders.Add("x-api-key", new[] { Configuration["authApiKey"] });
-			});
-	        services.AddHttpClient<IBlogApi, BlogApi>(client => {
-		        client.BaseAddress = new Uri(Configuration["blogApiEndpoint"]);
-				client.DefaultRequestHeaders.Add("x-api-key", new[] { Configuration["authApiKey"] });
-	        });
-			services.AddHttpClient<IAuthenticationProvider, AuthenticationProvider>(client => {
-				client.BaseAddress = new Uri(Configuration["authApiEndpoint"]);
-				client.DefaultRequestHeaders.Add("x-api-key", new[] { Configuration["authApiKey"] });
-			});
-			services.AddHttpClient<IApiKeyManager, ApiKeyManager>(client => {
-				client.BaseAddress = new Uri(Configuration["authApiEndpoint"] + "api/");
-				client.DefaultRequestHeaders.Add("x-api-key", new[] { Configuration["authApiKey"] });
-			});
-			services.AddHttpClient<IMailboxesApi, MailboxesApi>(client => {
-				client.BaseAddress = new Uri(Configuration["mailboxesApiEndpoint"]);
-				client.DefaultRequestHeaders.Add("x-api-key", new[] { Configuration["authApiKey"] });
-			});
+			void AddHttpClientWithApiKey<TInterface, TImplementation>(string uriConfigKey, string extraUriString = "") where TInterface : class where TImplementation : class, TInterface =>
+				services.AddHttpClient<TInterface, TImplementation>(client =>
+				{
+					client.BaseAddress = new Uri(Configuration[uriConfigKey] + extraUriString);
+					client.DefaultRequestHeaders.Add("x-api-key", new[] { Configuration["authApiKey"] });
+				});
+			AddHttpClientWithApiKey<IGitApi, GitApi>("gitApiEndpoint");
+			AddHttpClientWithApiKey<IBlogApi, BlogApi>("blogApiEndpoint");
+			AddHttpClientWithApiKey<IAuthenticationProvider, AuthenticationProvider>("authApiEndpoint");
+			AddHttpClientWithApiKey<IApiKeyManager, ApiKeyManager>("authApiEndpoint", "api/");
+			AddHttpClientWithApiKey<IMailboxesApi, MailboxesApi>("mailboxesApiEndpoint");
 
 			services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();