diff --git a/ProxyInterfaceSourceGenerator Solution.sln b/ProxyInterfaceSourceGenerator Solution.sln
index 684e76f..5f7017b 100644
--- a/ProxyInterfaceSourceGenerator Solution.sln
+++ b/ProxyInterfaceSourceGenerator Solution.sln
@@ -32,6 +32,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProxyInterfaceConsumerForAk
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProxyInterfaceConsumerViaNuGet", "src-examples\ProxyInterfaceConsumerViaNuGet\ProxyInterfaceConsumerViaNuGet.csproj", "{1EA000E4-6103-4577-8D98-BDDA3BE458A2}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IHttpClient", "src\IHttpClient\IHttpClient.csproj", "{38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleAppIHttpClient", "src-examples\ConsoleAppIHttpClient\ConsoleAppIHttpClient.csproj", "{3E93C092-0E42-4200-B71A-5EEE410FE1F5}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -74,6 +78,18 @@ Global
{1EA000E4-6103-4577-8D98-BDDA3BE458A2}.DebugAttach|Any CPU.Build.0 = Debug|Any CPU
{1EA000E4-6103-4577-8D98-BDDA3BE458A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1EA000E4-6103-4577-8D98-BDDA3BE458A2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}.DebugAttach|Any CPU.ActiveCfg = Debug|Any CPU
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}.DebugAttach|Any CPU.Build.0 = Debug|Any CPU
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5}.DebugAttach|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5}.DebugAttach|Any CPU.Build.0 = Debug|Any CPU
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -85,6 +101,8 @@ Global
{5F7DA2C5-B908-4B57-9F5F-BADF1216D89C} = {38BA087F-EDA1-4F8A-A140-85B84791B815}
{590908DF-A813-467A-94E4-3500020D0D54} = {38BA087F-EDA1-4F8A-A140-85B84791B815}
{1EA000E4-6103-4577-8D98-BDDA3BE458A2} = {38BA087F-EDA1-4F8A-A140-85B84791B815}
+ {38C2BB6E-EE23-4C4F-B8D5-A2AD592DE5E3} = {ED3DA9DD-1E07-444B-A2D7-2DBA280F96D4}
+ {3E93C092-0E42-4200-B71A-5EEE410FE1F5} = {38BA087F-EDA1-4F8A-A140-85B84791B815}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {585F071D-051D-441C-9C6B-226D9E15A1F5}
diff --git a/resources/ihttpclient-icon.png b/resources/ihttpclient-icon.png
new file mode 100644
index 0000000..291cfe1
Binary files /dev/null and b/resources/ihttpclient-icon.png differ
diff --git a/src-examples/ConsoleAppIHttpClient/ConsoleAppIHttpClient.csproj b/src-examples/ConsoleAppIHttpClient/ConsoleAppIHttpClient.csproj
new file mode 100644
index 0000000..9f082cc
--- /dev/null
+++ b/src-examples/ConsoleAppIHttpClient/ConsoleAppIHttpClient.csproj
@@ -0,0 +1,13 @@
+
+
+
+ Exe
+ net8.0
+ enable
+
+
+
+
+
+
+
diff --git a/src-examples/ConsoleAppIHttpClient/Program.cs b/src-examples/ConsoleAppIHttpClient/Program.cs
new file mode 100644
index 0000000..ead450e
--- /dev/null
+++ b/src-examples/ConsoleAppIHttpClient/Program.cs
@@ -0,0 +1,13 @@
+using System.Net.Http;
+using System.Net.Http.Json;
+
+var httpClient = new HttpClient();
+var httpClientProxy = new HttpClientProxy(httpClient);
+
+var result = await httpClientProxy.GetAsync("https://www.google.nl");
+var todo = await httpClientProxy.GetFromJsonAsync("https://jsonplaceholder.typicode.com/todos/1");
+var postResult = await httpClientProxy.PostAsJsonAsync("https://jsonplaceholder.typicode.com/todos", new Todo { Id = 123 });
+var patchResult = await httpClientProxy.PatchAsJsonAsync("https://jsonplaceholder.typicode.com/todos", new Todo { Id = 400 });
+var putResult = await httpClientProxy.PutAsJsonAsync("https://jsonplaceholder.typicode.com/todos", new Todo { Id = 444 });
+
+int x = 0;
\ No newline at end of file
diff --git a/src-examples/ConsoleAppIHttpClient/Todo.cs b/src-examples/ConsoleAppIHttpClient/Todo.cs
new file mode 100644
index 0000000..158af1b
--- /dev/null
+++ b/src-examples/ConsoleAppIHttpClient/Todo.cs
@@ -0,0 +1,4 @@
+public class Todo
+{
+ public int Id { get; set; }
+}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumer/Address.cs b/src-examples/ProxyInterfaceConsumer/Address.cs
index 055c152..c9e80b8 100644
--- a/src-examples/ProxyInterfaceConsumer/Address.cs
+++ b/src-examples/ProxyInterfaceConsumer/Address.cs
@@ -1,6 +1,6 @@
using System;
-namespace DifferentNamespace
+namespace ProxyInterfaceConsumer
{
public class Address
{
diff --git a/src-examples/ProxyInterfaceConsumer/Http/IHttpClient.cs b/src-examples/ProxyInterfaceConsumer/Http/IHttpClient.cs
index d9bae73..cbd0a8a 100644
--- a/src-examples/ProxyInterfaceConsumer/Http/IHttpClient.cs
+++ b/src-examples/ProxyInterfaceConsumer/Http/IHttpClient.cs
@@ -1,14 +1,13 @@
-namespace ProxyInterfaceConsumer.Http
+using System.Net.Http;
+
+namespace ProxyInterfaceConsumer.Http;
+
+[ProxyInterfaceGenerator.Proxy(typeof(HttpClient), true)]
+public partial interface IHttpClient : IHttpMessageInvoker
{
- [ProxyInterfaceGenerator.Proxy(typeof(System.Net.Http.HttpClient), true)]
- public partial interface IHttpClient : IHttpMessageInvoker
- {
-
- }
+}
- [ProxyInterfaceGenerator.Proxy(typeof(System.Net.Http.HttpMessageInvoker))]
- public partial interface IHttpMessageInvoker
- {
-
- }
+[ProxyInterfaceGenerator.Proxy(typeof(HttpMessageInvoker))]
+public partial interface IHttpMessageInvoker
+{
}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumer/Http/IHttpClientExtensions.cs b/src-examples/ProxyInterfaceConsumer/Http/IHttpClientExtensions.cs
new file mode 100644
index 0000000..0ad8080
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumer/Http/IHttpClientExtensions.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Net.Http;
+using System.Net.Http.Json;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.Text.Json.Serialization.Metadata;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace ProxyInterfaceConsumer.Http;
+
+public static class IHttpClientExtensions
+{
+ #region PostAsJsonAsync
+ public static Task PostAsJsonAsync(this IHttpClient client, [StringSyntax(StringSyntaxAttribute.Uri)] string? requestUri, TValue value, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default)
+ {
+ return client._Instance.PostAsJsonAsync(requestUri, value, options, cancellationToken);
+ }
+
+ public static Task PostAsJsonAsync(this IHttpClient client, Uri? requestUri, TValue value, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default)
+ {
+ return client._Instance.PostAsJsonAsync(requestUri, value, options, cancellationToken);
+ }
+
+ public static Task PostAsJsonAsync(this IHttpClient client, [StringSyntax(StringSyntaxAttribute.Uri)] string? requestUri, TValue value, CancellationToken cancellationToken)
+ {
+ return client._Instance.PostAsJsonAsync(requestUri, value, options: null, cancellationToken);
+ }
+
+ public static Task PostAsJsonAsync(this IHttpClient client, Uri? requestUri, TValue value, CancellationToken cancellationToken)
+ {
+ return client._Instance.PostAsJsonAsync(requestUri, value, options: null, cancellationToken);
+ }
+
+ public static Task PostAsJsonAsync(this IHttpClient client, [StringSyntax(StringSyntaxAttribute.Uri)] string? requestUri, TValue value, JsonTypeInfo jsonTypeInfo, CancellationToken cancellationToken = default)
+ {
+ return client._Instance.PostAsJsonAsync(requestUri, value, jsonTypeInfo, cancellationToken);
+ }
+
+ public static Task PostAsJsonAsync(this IHttpClient client, Uri? requestUri, TValue value, JsonTypeInfo jsonTypeInfo, CancellationToken cancellationToken = default)
+ {
+ return client._Instance.PostAsJsonAsync(requestUri, value, jsonTypeInfo, cancellationToken);
+ }
+ #endregion
+
+ #region GetFromJsonAsync
+ public static Task