Skip to content
This repository was archived by the owner on Mar 16, 2025. It is now read-only.

Commit d9f4d6f

Browse files
[v2] Refactor http client provider (#153 #158)
1 parent a859359 commit d9f4d6f

File tree

8 files changed

+53
-44
lines changed

8 files changed

+53
-44
lines changed

src/libs/Trakt.NET.HttpClientFactory/HttpClientFactoryProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
namespace TraktNET
1+
namespace TraktNET
22
{
3-
internal sealed class HttpClientFactoryProvider(IHttpClientFactory httpClientFactory) : HttpClientProvider
3+
internal sealed class HttpClientFactoryProvider(IHttpClientFactory httpClientFactory) : HttpClientProvider<TraktContext>
44
{
55
internal override HttpClient GetHttpClient(TraktContext context) => httpClientFactory.CreateClient(context.ID);
66
}

src/libs/Trakt.NET/Internal/Constants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ internal static class API
2020

2121
internal static class Request
2222
{
23+
internal const string AuthenticationScheme = "Bearer";
24+
2325
internal static class Headers
2426
{
2527
internal const string APIVersionHeaderKey = "trakt-api-version";
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace TraktNET
2+
{
3+
public interface ITraktContext
4+
{
5+
string ID { get; }
6+
7+
Uri BaseUri { get; }
8+
}
9+
}

src/libs/Trakt.NET/Internal/Contexts/TraktContext.cs

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,13 @@
1-
namespace TraktNET
1+
namespace TraktNET
22
{
3-
public abstract class TraktContext
3+
public abstract class TraktContext : ITraktContext
44
{
55
private string _clientID = string.Empty;
66
private string _clientSecret = string.Empty;
77

8-
internal string ID { get; }
8+
public string ID { get; }
99

10-
internal string ClientID
11-
{
12-
get => _clientID;
13-
14-
set
15-
{
16-
ArgumentValidator.ThrowIfNullOrWhiteSpace(value, "client ID must not be null or empty or only whitespace", checkSpaces: true);
17-
_clientID = value;
18-
}
19-
}
20-
21-
internal string ClientSecret
22-
{
23-
get => _clientSecret;
24-
25-
set
26-
{
27-
ArgumentValidator.ThrowIfNullOrWhiteSpace(value, "client secret must not be null or empty or only whitespace", checkSpaces: true);
28-
_clientSecret = value;
29-
}
30-
}
10+
public Uri BaseUri { get; internal set; }
3111

3212
public TraktAuthorization? Authorization { get; set; }
3313

@@ -102,12 +82,6 @@ public static TraktContext Create(string clientID, string clientSecret)
10282
public static TraktContext CreateForSandbox(string clientID, string clientSecret)
10383
=> new TraktSandboxContext(clientID, clientSecret);
10484

105-
internal Uri BaseUri { get; set; }
106-
107-
internal Uri BaseAuthorizationUri { get; set; }
108-
109-
internal HttpClientProvider HttpClientProvider { get; set; }
110-
11185
protected TraktContext(string clientID, string clientSecret)
11286
{
11387
ID = Guid.NewGuid().ToString();
@@ -140,6 +114,32 @@ protected TraktContext(string clientID, string clientSecret)
140114
Users = new TraktUsersModule(this);
141115
}
142116

117+
internal string ClientID
118+
{
119+
get => _clientID;
120+
121+
set
122+
{
123+
ArgumentValidator.ThrowIfNullOrWhiteSpace(value, "client ID must not be null or empty or only whitespace", checkSpaces: true);
124+
_clientID = value;
125+
}
126+
}
127+
128+
internal string ClientSecret
129+
{
130+
get => _clientSecret;
131+
132+
set
133+
{
134+
ArgumentValidator.ThrowIfNullOrWhiteSpace(value, "client secret must not be null or empty or only whitespace", checkSpaces: true);
135+
_clientSecret = value;
136+
}
137+
}
138+
139+
internal Uri BaseAuthorizationUri { get; set; }
140+
141+
internal HttpClientProvider<TraktContext> HttpClientProvider { get; set; }
142+
143143
internal HttpClient GetHttpClient() => HttpClientProvider.GetHttpClient(this);
144144
}
145145
}

src/libs/Trakt.NET/Internal/Requests/HttpClientProvider.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Collections.Concurrent;
1+
using System.Collections.Concurrent;
22
using System.Net.Http.Headers;
33

44
#if !NETSTANDARD2_0
@@ -7,11 +7,11 @@
77

88
namespace TraktNET
99
{
10-
internal abstract class HttpClientProvider
10+
internal abstract class HttpClientProvider<TContext> where TContext : ITraktContext
1111
{
12-
internal abstract HttpClient GetHttpClient(TraktContext context);
12+
internal abstract HttpClient GetHttpClient(TContext context);
1313

14-
protected static HttpClient CreateHttpClient(TraktContext context)
14+
protected static HttpClient CreateHttpClient(TContext context)
1515
{
1616
var httpClient = new HttpClient { BaseAddress = context.BaseUri };
1717

@@ -25,7 +25,7 @@ protected static HttpClient CreateHttpClient(TraktContext context)
2525
}
2626
}
2727

28-
internal sealed class DefaultHttpClientProvider : HttpClientProvider
28+
internal sealed class DefaultHttpClientProvider : HttpClientProvider<TraktContext>
2929
{
3030
private static readonly ConcurrentDictionary<string, HttpClient> s_httpClientCache = new();
3131

src/libs/Trakt.NET/Internal/Requests/RequestHandler.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Net.Http.Headers;
1+
using System.Net.Http.Headers;
22

33
namespace TraktNET
44
{
@@ -97,8 +97,6 @@ private static async Task<RequestResponse> ExecuteRequestAsync(bool withContent,
9797

9898
private static void AddRequestMessageHeaders(TraktContext context, RequestBase request)
9999
{
100-
const string AuthenticationScheme = "Bearer";
101-
102100
request.Headers.Add(Constants.Request.Headers.APIVersionHeaderKey, $"{Constants.API.Version}");
103101
request.Headers.Add(Constants.Request.Headers.APIClientIDHeaderKey, context.ClientID);
104102

@@ -117,7 +115,7 @@ private static void AddRequestMessageHeaders(TraktContext context, RequestBase r
117115

118116
if (context.Authorization != null)
119117
{
120-
request.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationScheme, context.Authorization!.AccessToken ?? string.Empty);
118+
request.Headers.Authorization = new AuthenticationHeaderValue(Constants.Request.AuthenticationScheme, context.Authorization!.AccessToken ?? string.Empty);
121119
}
122120
}
123121

src/libs/Trakt.NET/Internal/TraktClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public sealed partial class TraktClient
44
{
55
private readonly TraktContext _context;
66

7-
internal HttpClientProvider HttpClientProvider
7+
internal HttpClientProvider<TraktContext> HttpClientProvider
88
{
99
get => _context.HttpClientProvider;
1010
set => _context.HttpClientProvider = value;

src/tests/libs/Trakt.NET.Tests.Utility/TestHttpClientProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using RichardSzalay.MockHttp;
1+
using RichardSzalay.MockHttp;
22
using System.Net;
33

44
#if TRAKT_NET_4XX_FRAMEWORK_TARGET
@@ -10,7 +10,7 @@
1010

1111
namespace TraktNET
1212
{
13-
internal sealed class TestHttpClientProvider : HttpClientProvider, IDisposable
13+
internal sealed class TestHttpClientProvider : HttpClientProvider<TraktContext>, IDisposable
1414
{
1515
private const string AcceptMediaType = "application/json";
1616
private const string TraktApiHeaderKey = "trakt-api-key";

0 commit comments

Comments
 (0)