diff --git a/.whitesource b/.whitesource
new file mode 100644
index 000000000..5ef5902b9
--- /dev/null
+++ b/.whitesource
@@ -0,0 +1,8 @@
+##########################################################
+#### WhiteSource "Bolt for Github" configuration file ####
+##########################################################
+
+# Configuration #
+#---------------#
+ws.repo.scan=true
+vulnerable.check.run.conclusion.level=success
\ No newline at end of file
diff --git a/InterfaceStubGenerator.Core/GeneratedInterfaceStubTemplate.mustache b/InterfaceStubGenerator.Core/GeneratedInterfaceStubTemplate.mustache
index 3b458f4cc..c1780e617 100644
--- a/InterfaceStubGenerator.Core/GeneratedInterfaceStubTemplate.mustache
+++ b/InterfaceStubGenerator.Core/GeneratedInterfaceStubTemplate.mustache
@@ -61,11 +61,7 @@ namespace {{Namespace}}
{{#MethodList}}
///
- public virtual {{ReturnType}} {{Name}}{{#MethodTypeParameters}}<{{.}}>
- {{/MethodTypeParameters}}({{ArgumentListWithTypes}})
- {{#MethodConstraintClauses}}
- {{.}}
- {{/MethodConstraintClauses}}
+ {{ReturnType}} {{InterfaceName}}{{#TypeParameters}}<{{.}}>{{/TypeParameters}}.{{Name}}{{#MethodTypeParameters}}<{{.}}>{{/MethodTypeParameters}}({{ArgumentListWithTypes}})
{
{{#IsRefitMethod}}
var arguments = new object[] { {{ArgumentList}} };
diff --git a/InterfaceStubGenerator.Core/InterfaceStubGenerator.cs b/InterfaceStubGenerator.Core/InterfaceStubGenerator.cs
index ff5444e08..c7bc907db 100644
--- a/InterfaceStubGenerator.Core/InterfaceStubGenerator.cs
+++ b/InterfaceStubGenerator.Core/InterfaceStubGenerator.cs
@@ -4,7 +4,6 @@
using System.Linq;
using System.Reflection;
using System.Text;
-using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -92,6 +91,7 @@ public ClassTemplateInfo GenerateClassInfoForInterface(InterfaceDeclarationSynta
ret.InterfaceName = GetInterfaceName(interfaceTree.Identifier);
ret.GeneratedClassSuffix = ret.InterfaceName.Replace(".", "");
ret.Modifiers = interfaceTree.Modifiers.Select(t => t.ValueText).FirstOrDefault(m => m == "public" || m == "internal");
+ ret.BaseClassNames = interfaceTree.BaseList?.Types.Select(t => t.ToString()).ToList();
var ns = parent as NamespaceDeclarationSyntax;
ret.Namespace = ns?.Name?.ToString() ?? $"AutoGenerated{ret.GeneratedClassSuffix}";
@@ -114,6 +114,8 @@ public ClassTemplateInfo GenerateClassInfoForInterface(InterfaceDeclarationSynta
var mti = new MethodTemplateInfo
{
Name = x.Identifier.Text,
+ InterfaceName = ret.InterfaceName,
+ TypeParameters = ret.TypeParameters,
ReturnType = x.ReturnType.ToString(),
ArgumentList = string.Join(",",
x.ParameterList.Parameters
@@ -134,7 +136,6 @@ public ClassTemplateInfo GenerateClassInfoForInterface(InterfaceDeclarationSynta
mti.MethodTypeParameterList = string.Join(", ", typeParameters.Select(p => $"typeof({p.Identifier.ValueText})"));
mti.MethodTypeParameterNames = $"{string.Join(", ", typeParameters.Select(p => $"{{typeof({p.Identifier.ValueText}).AssemblyQualifiedName}}"))}";
}
- mti.MethodConstraintClauses = x.ConstraintClauses.ToFullString().Trim();
}
return mti;
})
@@ -181,9 +182,20 @@ public TemplateInformation GenerateTemplateInfoForInterfaceList(List c.BaseClassNames != null && c.BaseClassNames.Any()))
+ {
+ var methodsToAdd = ret.ClassList.Where(oc => c.BaseClassNames.Contains(oc.InterfaceName)).SelectMany(oc => oc.MethodList);
+ c.MethodList.AddRange(methodsToAdd);
+ }
+ }
+
public void GenerateWarnings(List interfacesToGenerate)
{
var missingAttributeWarnings = interfacesToGenerate
@@ -240,6 +252,7 @@ public class ClassTemplateInfo
public string ConstraintClauses { get; set; }
public string GeneratedClassSuffix { get; set; }
public string InterfaceName { get; set; }
+ public List BaseClassNames { get; set; }
public List MethodList { get; set; }
public string Modifiers { get; set; }
public string Namespace { get; set; }
@@ -255,9 +268,10 @@ public class MethodTemplateInfo
public string Name { get; set; }
public string ReturnType { get; set; }
public string MethodTypeParameters { get; set; }
- public string MethodConstraintClauses { get; set; }
public string MethodTypeParameterList { get; set; }
public string MethodTypeParameterNames { get; set; }
+ public string InterfaceName { get; set; }
+ public string TypeParameters { get; set; }
}
public class TemplateInformation
diff --git a/README.md b/README.md
index 60b16a79e..9ac783073 100644
--- a/README.md
+++ b/README.md
@@ -633,6 +633,69 @@ Which can be used like this:
// than one type (unless you have a different domain for each type)
var api = RestService.For>("http://api.example.com/users");
```
+### Interface inheritance
+
+When multiple services that need to be kept separate share a number of APIs, it is possible to leverage interface inheritance to avoid having to define the same Refit methods multiple times in different services:
+
+```csharp
+public interface IBaseService
+{
+ [Get("/resources")]
+ Task GetResource(string id);
+}
+
+public interface IDerivedServiceA : IBaseService
+{
+ [Delete("/resources")]
+ Task DeleteResource(string id);
+}
+
+public interface IDerivedServiceB : IBaseService
+{
+ [Post("/resources")]
+ Task AddResource([Body] Resource resource);
+}
+```
+
+In this example, the `IDerivedServiceA` interface will expose both the `GetResource` and `DeleteResource` APIs, while `IDerivedServiceB` will expose `GetResource` and `AddResource`.
+
+#### Headers inheritance
+
+When using inheritance, existing header attributes will passed along as well, and the inner-most ones will have precedence:
+
+```csharp
+[Headers("User-Agent: AAA")]
+public interface IAmInterfaceA
+{
+ [Get("/get?result=Ping")]
+ Task Ping();
+}
+
+[Headers("User-Agent: BBB")]
+public interface IAmInterfaceB : IAmInterfaceA
+{
+ [Get("/get?result=Pang")]
+ [Headers("User-Agent: PANG")]
+ Task Pang();
+
+ [Get("/get?result=Foo")]
+ Task Foo();
+}
+```
+
+Here, `IAmInterfaceB.Pang()` will use `PANG` as its user agent, while `IAmInterfaceB.Foo` and `IAmInterfaceB.Ping` will use `BBB`.
+Note that if `IAmInterfaceB` didn't have a header attribute, `Foo` would then use the `AAA` value inherited from `IAmInterfaceA`.
+If an interface is inheriting more than one interface, the order of precedence is the same as the one in which the inherited interfaces are declared:
+
+```csharp
+public interface IAmInterfaceC : IAmInterfaceA, IAmInterfaceB
+{
+ [Get("/get?result=Foo")]
+ Task Foo();
+}
+```
+
+Here `IAmInterfaceC.Foo` would use the header attribute inherited from `IAmInterfaceA`, if present, or the one inherited from `IAmInterfaceB`, and so on for all the declared interfaces.
### Using HttpClientFactory
diff --git a/Refit.Tests/InheritedInterfacesApi.cs b/Refit.Tests/InheritedInterfacesApi.cs
new file mode 100644
index 000000000..24a7c46b2
--- /dev/null
+++ b/Refit.Tests/InheritedInterfacesApi.cs
@@ -0,0 +1,27 @@
+using System.Threading.Tasks;
+using Refit; // InterfaceStubGenerator looks for this
+using static System.Math; // This is here to verify https://github.com/paulcbetts/refit/issues/283
+
+namespace Refit.Tests
+{
+ [Headers("User-Agent: Refit Integration Tests")]
+ public interface IAmInterfaceA
+ {
+ [Get("/get?result=Ping")]
+ Task Ping();
+ }
+
+ [Headers("User-Agent: Refit Integration Tests")]
+ public interface IAmInterfaceB
+ {
+ [Get("/get?result=Pong")]
+ Task Pong();
+ }
+
+ [Headers("User-Agent: Refit Integration Tests")]
+ public interface IAmInterfaceC : IAmInterfaceB, IAmInterfaceA
+ {
+ [Get("/get?result=Pang")]
+ Task Pang();
+ }
+}
diff --git a/Refit.Tests/InterfaceStubGenerator.cs b/Refit.Tests/InterfaceStubGenerator.cs
index 1b6a62bac..479852da3 100644
--- a/Refit.Tests/InterfaceStubGenerator.cs
+++ b/Refit.Tests/InterfaceStubGenerator.cs
@@ -27,9 +27,11 @@ public void GenerateInterfaceStubsSmokeTest()
var result = fixture.GenerateInterfaceStubs(new[] {
IntegrationTestHelper.GetPath("RestService.cs"),
IntegrationTestHelper.GetPath("GitHubApi.cs"),
+ IntegrationTestHelper.GetPath("InheritedInterfacesApi.cs"),
});
Assert.Contains("IGitHubApi", result);
+ Assert.Contains("IAmInterfaceC", result);
}
[Fact]
@@ -126,6 +128,32 @@ public void GenerateTemplateInfoForInterfaceListSmokeTest()
Assert.Equal(12, result.ClassList.Count);
}
+ [Fact]
+ public void GenerateTemplateInfoForInheritedInterfacesListSmokeTest()
+ {
+ var file = CSharpSyntaxTree.ParseText(File.ReadAllText(IntegrationTestHelper.GetPath("InheritedInterfacesApi.cs")));
+ var fixture = new InterfaceStubGenerator();
+
+ var input = file.GetRoot().DescendantNodes()
+ .OfType()
+ .ToList();
+
+ var result = fixture.GenerateTemplateInfoForInterfaceList(input);
+ Assert.Equal(3, result.ClassList.Count);
+
+ var inherited = result.ClassList.First(c => c.InterfaceName == "IAmInterfaceC");
+
+ Assert.Equal(3, inherited.MethodList.Count);
+ var methodNames = inherited.MethodList.Select(m => m.Name).ToList();
+
+ Assert.Contains("Ping", methodNames);
+ Assert.Contains("Pong", methodNames);
+ Assert.Contains("Pang", methodNames);
+
+ Assert.Equal("IAmInterfaceC", inherited.InterfaceName);
+ Assert.Equal("IAmInterfaceC", inherited.GeneratedClassSuffix);
+ }
+
[Fact]
public void RetainsAliasesInUsings()
{
diff --git a/Refit.Tests/RefitStubs.Net46.cs b/Refit.Tests/RefitStubs.Net46.cs
index fda73a626..f3d0ad3d3 100644
--- a/Refit.Tests/RefitStubs.Net46.cs
+++ b/Refit.Tests/RefitStubs.Net46.cs
@@ -73,7 +73,7 @@ public AutoGeneratedIAmARefitInterfaceButNobodyUsesMe(HttpClient client, IReques
}
///
- public virtual Task RefitMethod()
+ Task IAmARefitInterfaceButNobodyUsesMe.RefitMethod()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("RefitMethod", new Type[] { });
@@ -81,7 +81,7 @@ public virtual Task RefitMethod()
}
///
- public virtual Task AnotherRefitMethod()
+ Task IAmARefitInterfaceButNobodyUsesMe.AnotherRefitMethod()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("AnotherRefitMethod", new Type[] { });
@@ -89,13 +89,13 @@ public virtual Task AnotherRefitMethod()
}
///
- public virtual Task NoConstantsAllowed()
+ Task IAmARefitInterfaceButNobodyUsesMe.NoConstantsAllowed()
{
throw new NotImplementedException("Either this method has no Refit HTTP method attribute or you've used something other than a string literal for the 'path' argument.");
}
///
- public virtual Task SpacesShouldntBreakMe()
+ Task IAmARefitInterfaceButNobodyUsesMe.SpacesShouldntBreakMe()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("SpacesShouldntBreakMe", new Type[] { });
@@ -103,7 +103,7 @@ public virtual Task SpacesShouldntBreakMe()
}
///
- public virtual Task ReservedWordsForParameterNames(int @int,string @string,float @long)
+ Task IAmARefitInterfaceButNobodyUsesMe.ReservedWordsForParameterNames(int @int,string @string,float @long)
{
var arguments = new object[] { @int,@string,@long };
var func = requestBuilder.BuildRestResultFuncForMethod("ReservedWordsForParameterNames", new Type[] { typeof(int),typeof(string),typeof(float) });
@@ -135,7 +135,7 @@ public AutoGeneratedIAmHalfRefit(HttpClient client, IRequestBuilder requestBuild
}
///
- public virtual Task Post()
+ Task IAmHalfRefit.Post()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Post", new Type[] { });
@@ -143,13 +143,125 @@ public virtual Task Post()
}
///
- public virtual Task Get()
+ Task IAmHalfRefit.Get()
{
throw new NotImplementedException("Either this method has no Refit HTTP method attribute or you've used something other than a string literal for the 'path' argument.");
}
}
}
+namespace Refit.Tests
+{
+ using Refit.Tests.RefitInternalGenerated;
+
+ ///
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ [global::System.Diagnostics.DebuggerNonUserCode]
+ [Preserve]
+ [global::System.Reflection.Obfuscation(Exclude=true)]
+ partial class AutoGeneratedIAmInterfaceA : IAmInterfaceA
+ {
+ ///
+ public HttpClient Client { get; protected set; }
+ readonly IRequestBuilder requestBuilder;
+
+ ///
+ public AutoGeneratedIAmInterfaceA(HttpClient client, IRequestBuilder requestBuilder)
+ {
+ Client = client;
+ this.requestBuilder = requestBuilder;
+ }
+
+ ///
+ Task IAmInterfaceA.Ping()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Ping", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+ }
+}
+
+namespace Refit.Tests
+{
+ using Refit.Tests.RefitInternalGenerated;
+
+ ///
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ [global::System.Diagnostics.DebuggerNonUserCode]
+ [Preserve]
+ [global::System.Reflection.Obfuscation(Exclude=true)]
+ partial class AutoGeneratedIAmInterfaceB : IAmInterfaceB
+ {
+ ///
+ public HttpClient Client { get; protected set; }
+ readonly IRequestBuilder requestBuilder;
+
+ ///
+ public AutoGeneratedIAmInterfaceB(HttpClient client, IRequestBuilder requestBuilder)
+ {
+ Client = client;
+ this.requestBuilder = requestBuilder;
+ }
+
+ ///
+ Task IAmInterfaceB.Pong()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Pong", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+ }
+}
+
+namespace Refit.Tests
+{
+ using Refit.Tests.RefitInternalGenerated;
+
+ ///
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ [global::System.Diagnostics.DebuggerNonUserCode]
+ [Preserve]
+ [global::System.Reflection.Obfuscation(Exclude=true)]
+ partial class AutoGeneratedIAmInterfaceC : IAmInterfaceC
+ {
+ ///
+ public HttpClient Client { get; protected set; }
+ readonly IRequestBuilder requestBuilder;
+
+ ///
+ public AutoGeneratedIAmInterfaceC(HttpClient client, IRequestBuilder requestBuilder)
+ {
+ Client = client;
+ this.requestBuilder = requestBuilder;
+ }
+
+ ///
+ Task IAmInterfaceC.Pang()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Pang", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+
+ ///
+ Task IAmInterfaceA.Ping()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Ping", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+
+ ///
+ Task IAmInterfaceB.Pong()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Pong", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+ }
+}
+
namespace Refit.Tests
{
using Refit.Tests.RefitInternalGenerated;
@@ -173,7 +285,7 @@ public AutoGeneratedIApiWithDecimal(HttpClient client, IRequestBuilder requestBu
}
///
- public virtual Task GetWithDecimal(decimal value)
+ Task IApiWithDecimal.GetWithDecimal(decimal value)
{
var arguments = new object[] { value };
var func = requestBuilder.BuildRestResultFuncForMethod("GetWithDecimal", new Type[] { typeof(decimal) });
@@ -205,7 +317,7 @@ public AutoGeneratedIBodylessApi(HttpClient client, IRequestBuilder requestBuild
}
///
- public virtual Task Post()
+ Task IBodylessApi.Post()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Post", new Type[] { });
@@ -213,7 +325,7 @@ public virtual Task Post()
}
///
- public virtual Task Get()
+ Task IBodylessApi.Get()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { });
@@ -221,7 +333,7 @@ public virtual Task Get()
}
///
- public virtual Task Head()
+ Task IBodylessApi.Head()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Head", new Type[] { });
@@ -256,7 +368,7 @@ public AutoGeneratedIBoringCrudApi(HttpClient client, IRequestBuilder requestBui
}
///
- public virtual Task Create(T paylod)
+ Task IBoringCrudApi.Create(T paylod)
{
var arguments = new object[] { paylod };
var func = requestBuilder.BuildRestResultFuncForMethod("Create", new Type[] { typeof(T) });
@@ -264,7 +376,7 @@ public virtual Task Create(T paylod)
}
///
- public virtual Task> ReadAll()
+ Task> IBoringCrudApi.ReadAll()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("ReadAll", new Type[] { });
@@ -272,7 +384,7 @@ public virtual Task> ReadAll()
}
///
- public virtual Task ReadOne(TKey key)
+ Task IBoringCrudApi.ReadOne(TKey key)
{
var arguments = new object[] { key };
var func = requestBuilder.BuildRestResultFuncForMethod("ReadOne", new Type[] { typeof(TKey) });
@@ -280,7 +392,7 @@ public virtual Task ReadOne(TKey key)
}
///
- public virtual Task Update(TKey key,T payload)
+ Task IBoringCrudApi.Update(TKey key,T payload)
{
var arguments = new object[] { key,payload };
var func = requestBuilder.BuildRestResultFuncForMethod("Update", new Type[] { typeof(TKey),typeof(T) });
@@ -288,7 +400,7 @@ public virtual Task Update(TKey key,T payload)
}
///
- public virtual Task Delete(TKey key)
+ Task IBoringCrudApi.Delete(TKey key)
{
var arguments = new object[] { key };
var func = requestBuilder.BuildRestResultFuncForMethod("Delete", new Type[] { typeof(TKey) });
@@ -320,7 +432,7 @@ public AutoGeneratedIBrokenWebApi(HttpClient client, IRequestBuilder requestBuil
}
///
- public virtual Task PostAValue(string derp)
+ Task IBrokenWebApi.PostAValue(string derp)
{
var arguments = new object[] { derp };
var func = requestBuilder.BuildRestResultFuncForMethod("PostAValue", new Type[] { typeof(string) });
@@ -352,7 +464,7 @@ public AutoGeneratedIGitHubApi(HttpClient client, IRequestBuilder requestBuilder
}
///
- public virtual Task GetUser(string userName)
+ Task IGitHubApi.GetUser(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUser", new Type[] { typeof(string) });
@@ -360,7 +472,7 @@ public virtual Task GetUser(string userName)
}
///
- public virtual IObservable GetUserObservable(string userName)
+ IObservable IGitHubApi.GetUserObservable(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUserObservable", new Type[] { typeof(string) });
@@ -368,7 +480,7 @@ public virtual IObservable GetUserObservable(string userName)
}
///
- public virtual IObservable GetUserCamelCase(string userName)
+ IObservable IGitHubApi.GetUserCamelCase(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUserCamelCase", new Type[] { typeof(string) });
@@ -376,7 +488,7 @@ public virtual IObservable GetUserCamelCase(string userName)
}
///
- public virtual Task> GetOrgMembers(string orgName)
+ Task> IGitHubApi.GetOrgMembers(string orgName)
{
var arguments = new object[] { orgName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetOrgMembers", new Type[] { typeof(string) });
@@ -384,7 +496,7 @@ public virtual Task> GetOrgMembers(string orgName)
}
///
- public virtual Task FindUsers(string q)
+ Task IGitHubApi.FindUsers(string q)
{
var arguments = new object[] { q };
var func = requestBuilder.BuildRestResultFuncForMethod("FindUsers", new Type[] { typeof(string) });
@@ -392,7 +504,7 @@ public virtual Task FindUsers(string q)
}
///
- public virtual Task GetIndex()
+ Task IGitHubApi.GetIndex()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetIndex", new Type[] { });
@@ -400,7 +512,7 @@ public virtual Task GetIndex()
}
///
- public virtual IObservable GetIndexObservable()
+ IObservable IGitHubApi.GetIndexObservable()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetIndexObservable", new Type[] { });
@@ -408,7 +520,7 @@ public virtual IObservable GetIndexObservable()
}
///
- public virtual Task NothingToSeeHere()
+ Task IGitHubApi.NothingToSeeHere()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("NothingToSeeHere", new Type[] { });
@@ -416,7 +528,7 @@ public virtual Task NothingToSeeHere()
}
///
- public virtual Task> NothingToSeeHereWithMetadata()
+ Task> IGitHubApi.NothingToSeeHereWithMetadata()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("NothingToSeeHereWithMetadata", new Type[] { });
@@ -424,7 +536,7 @@ public virtual Task> NothingToSeeHereWithMetadata()
}
///
- public virtual Task> GetUserWithMetadata(string userName)
+ Task> IGitHubApi.GetUserWithMetadata(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUserWithMetadata", new Type[] { typeof(string) });
@@ -432,7 +544,7 @@ public virtual Task> GetUserWithMetadata(string userName)
}
///
- public virtual IObservable> GetUserObservableWithMetadata(string userName)
+ IObservable> IGitHubApi.GetUserObservableWithMetadata(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUserObservableWithMetadata", new Type[] { typeof(string) });
@@ -440,7 +552,7 @@ public virtual IObservable> GetUserObservableWithMetadata(stri
}
///
- public virtual Task CreateUser(User user)
+ Task IGitHubApi.CreateUser(User user)
{
var arguments = new object[] { user };
var func = requestBuilder.BuildRestResultFuncForMethod("CreateUser", new Type[] { typeof(User) });
@@ -448,7 +560,7 @@ public virtual Task CreateUser(User user)
}
///
- public virtual Task> CreateUserWithMetadata(User user)
+ Task> IGitHubApi.CreateUserWithMetadata(User user)
{
var arguments = new object[] { user };
var func = requestBuilder.BuildRestResultFuncForMethod("CreateUserWithMetadata", new Type[] { typeof(User) });
@@ -484,7 +596,7 @@ public AutoGeneratedIHttpBinApi(HttpClient client, IRequestBuilder requestBuilde
}
///
- public virtual Task Get(TParam param,THeader header)
+ Task IHttpBinApi.Get(TParam param,THeader header)
{
var arguments = new object[] { param,header };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(TParam),typeof(THeader) });
@@ -492,7 +604,7 @@ public virtual Task Get(TParam param,THeader header)
}
///
- public virtual Task GetQuery(TParam param)
+ Task IHttpBinApi.GetQuery(TParam param)
{
var arguments = new object[] { param };
var func = requestBuilder.BuildRestResultFuncForMethod("GetQuery", new Type[] { typeof(TParam) });
@@ -500,7 +612,7 @@ public virtual Task GetQuery(TParam param)
}
///
- public virtual Task GetQueryWithIncludeParameterName(TParam param)
+ Task IHttpBinApi.GetQueryWithIncludeParameterName(TParam param)
{
var arguments = new object[] { param };
var func = requestBuilder.BuildRestResultFuncForMethod("GetQueryWithIncludeParameterName", new Type[] { typeof(TParam) });
@@ -508,8 +620,7 @@ public virtual Task GetQueryWithIncludeParameterName(TParam param)
}
///
- public virtual Task GetQuery1
- (TParam param)
+ Task IHttpBinApi.GetQuery1(TParam param)
{
var arguments = new object[] { param };
var func = requestBuilder.BuildRestResultFuncForMethod("GetQuery1", new Type[] { typeof(TParam) }, new Type[] { typeof(TValue) });
@@ -541,7 +652,7 @@ public AutoGeneratedIHttpContentApi(HttpClient client, IRequestBuilder requestBu
}
///
- public virtual Task PostFileUpload(HttpContent content)
+ Task IHttpContentApi.PostFileUpload(HttpContent content)
{
var arguments = new object[] { content };
var func = requestBuilder.BuildRestResultFuncForMethod("PostFileUpload", new Type[] { typeof(HttpContent) });
@@ -549,7 +660,7 @@ public virtual Task PostFileUpload(HttpContent content)
}
///
- public virtual Task> PostFileUploadWithMetadata(HttpContent content)
+ Task> IHttpContentApi.PostFileUploadWithMetadata(HttpContent content)
{
var arguments = new object[] { content };
var func = requestBuilder.BuildRestResultFuncForMethod("PostFileUploadWithMetadata", new Type[] { typeof(HttpContent) });
@@ -581,7 +692,7 @@ public AutoGeneratedResponseTestsIMyAliasService(HttpClient client, IRequestBuil
}
///
- public virtual Task GetTestObject()
+ Task ResponseTests.IMyAliasService.GetTestObject()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetTestObject", new Type[] { });
@@ -613,7 +724,7 @@ public AutoGeneratedAuthenticatedClientHandlerTestsIMyAuthenticatedService(HttpC
}
///
- public virtual Task GetUnauthenticated()
+ Task AuthenticatedClientHandlerTests.IMyAuthenticatedService.GetUnauthenticated()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUnauthenticated", new Type[] { });
@@ -621,7 +732,7 @@ public virtual Task GetUnauthenticated()
}
///
- public virtual Task GetAuthenticated()
+ Task AuthenticatedClientHandlerTests.IMyAuthenticatedService.GetAuthenticated()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetAuthenticated", new Type[] { });
@@ -653,7 +764,7 @@ public AutoGeneratedINamespaceCollisionApi(HttpClient client, IRequestBuilder re
}
///
- public virtual Task SomeRequest()
+ Task INamespaceCollisionApi.SomeRequest()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("SomeRequest", new Type[] { });
@@ -685,7 +796,7 @@ public AutoGeneratedTestNestedINestedGitHubApi(HttpClient client, IRequestBuilde
}
///
- public virtual Task GetUser(string userName)
+ Task TestNested.INestedGitHubApi.GetUser(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUser", new Type[] { typeof(string) });
@@ -693,7 +804,7 @@ public virtual Task GetUser(string userName)
}
///
- public virtual IObservable GetUserObservable(string userName)
+ IObservable TestNested.INestedGitHubApi.GetUserObservable(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUserObservable", new Type[] { typeof(string) });
@@ -701,7 +812,7 @@ public virtual IObservable GetUserObservable(string userName)
}
///
- public virtual IObservable GetUserCamelCase(string userName)
+ IObservable TestNested.INestedGitHubApi.GetUserCamelCase(string userName)
{
var arguments = new object[] { userName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetUserCamelCase", new Type[] { typeof(string) });
@@ -709,7 +820,7 @@ public virtual IObservable GetUserCamelCase(string userName)
}
///
- public virtual Task> GetOrgMembers(string orgName)
+ Task> TestNested.INestedGitHubApi.GetOrgMembers(string orgName)
{
var arguments = new object[] { orgName };
var func = requestBuilder.BuildRestResultFuncForMethod("GetOrgMembers", new Type[] { typeof(string) });
@@ -717,7 +828,7 @@ public virtual Task> GetOrgMembers(string orgName)
}
///
- public virtual Task FindUsers(string q)
+ Task TestNested.INestedGitHubApi.FindUsers(string q)
{
var arguments = new object[] { q };
var func = requestBuilder.BuildRestResultFuncForMethod("FindUsers", new Type[] { typeof(string) });
@@ -725,7 +836,7 @@ public virtual Task FindUsers(string q)
}
///
- public virtual Task GetIndex()
+ Task TestNested.INestedGitHubApi.GetIndex()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetIndex", new Type[] { });
@@ -733,7 +844,7 @@ public virtual Task GetIndex()
}
///
- public virtual IObservable GetIndexObservable()
+ IObservable TestNested.INestedGitHubApi.GetIndexObservable()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetIndexObservable", new Type[] { });
@@ -741,7 +852,7 @@ public virtual IObservable GetIndexObservable()
}
///
- public virtual Task NothingToSeeHere()
+ Task TestNested.INestedGitHubApi.NothingToSeeHere()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("NothingToSeeHere", new Type[] { });
@@ -773,9 +884,7 @@ public AutoGeneratedINonGenericInterfaceWithGenericMethod(HttpClient client, IRe
}
///
- public virtual Task PostMessage
- (T message)
- where T : IMessage
+ Task INonGenericInterfaceWithGenericMethod.PostMessage(T message)
{
var arguments = new object[] { message };
var func = requestBuilder.BuildRestResultFuncForMethod("PostMessage", new Type[] { typeof(T) }, new Type[] { typeof(T) });
@@ -783,9 +892,7 @@ public virtual Task PostMessage
}
///
- public virtual Task PostMessage
- (T message,U param1,V param2)
- where T : IMessage where U : T
+ Task INonGenericInterfaceWithGenericMethod.PostMessage(T message,U param1,V param2)
{
var arguments = new object[] { message,param1,param2 };
var func = requestBuilder.BuildRestResultFuncForMethod("PostMessage", new Type[] { typeof(T),typeof(U),typeof(V) }, new Type[] { typeof(T), typeof(U), typeof(V) });
@@ -817,7 +924,7 @@ public AutoGeneratedINpmJs(HttpClient client, IRequestBuilder requestBuilder)
}
///
- public virtual Task GetCongruence()
+ Task INpmJs.GetCongruence()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetCongruence", new Type[] { });
@@ -849,7 +956,7 @@ public AutoGeneratedIRequestBin(HttpClient client, IRequestBuilder requestBuilde
}
///
- public virtual Task Post()
+ Task IRequestBin.Post()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Post", new Type[] { });
@@ -857,7 +964,7 @@ public virtual Task Post()
}
///
- public virtual Task PostRawStringDefault(string str)
+ Task IRequestBin.PostRawStringDefault(string str)
{
var arguments = new object[] { str };
var func = requestBuilder.BuildRestResultFuncForMethod("PostRawStringDefault", new Type[] { typeof(string) });
@@ -865,7 +972,7 @@ public virtual Task PostRawStringDefault(string str)
}
///
- public virtual Task PostRawStringJson(string str)
+ Task IRequestBin.PostRawStringJson(string str)
{
var arguments = new object[] { str };
var func = requestBuilder.BuildRestResultFuncForMethod("PostRawStringJson", new Type[] { typeof(string) });
@@ -873,7 +980,7 @@ public virtual Task PostRawStringJson(string str)
}
///
- public virtual Task PostRawStringUrlEncoded(string str)
+ Task IRequestBin.PostRawStringUrlEncoded(string str)
{
var arguments = new object[] { str };
var func = requestBuilder.BuildRestResultFuncForMethod("PostRawStringUrlEncoded", new Type[] { typeof(string) });
@@ -881,8 +988,7 @@ public virtual Task PostRawStringUrlEncoded(string str)
}
///
- public virtual Task PostGeneric
- (T param)
+ Task IRequestBin.PostGeneric(T param)
{
var arguments = new object[] { param };
var func = requestBuilder.BuildRestResultFuncForMethod("PostGeneric", new Type[] { typeof(T) }, new Type[] { typeof(T) });
@@ -914,7 +1020,7 @@ public AutoGeneratedIRunscopeApi(HttpClient client, IRequestBuilder requestBuild
}
///
- public virtual Task UploadStream(Stream stream)
+ Task IRunscopeApi.UploadStream(Stream stream)
{
var arguments = new object[] { stream };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadStream", new Type[] { typeof(Stream) });
@@ -922,7 +1028,7 @@ public virtual Task UploadStream(Stream stream)
}
///
- public virtual Task UploadStreamPart(StreamPart stream)
+ Task IRunscopeApi.UploadStreamPart(StreamPart stream)
{
var arguments = new object[] { stream };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadStreamPart", new Type[] { typeof(StreamPart) });
@@ -930,7 +1036,7 @@ public virtual Task UploadStreamPart(StreamPart stream)
}
///
- public virtual Task UploadBytes(byte[] bytes)
+ Task IRunscopeApi.UploadBytes(byte[] bytes)
{
var arguments = new object[] { bytes };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadBytes", new Type[] { typeof(byte[]) });
@@ -938,7 +1044,7 @@ public virtual Task UploadBytes(byte[] bytes)
}
///
- public virtual Task UploadBytesPart(ByteArrayPart bytes)
+ Task IRunscopeApi.UploadBytesPart(ByteArrayPart bytes)
{
var arguments = new object[] { bytes };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadBytesPart", new Type[] { typeof(ByteArrayPart) });
@@ -946,7 +1052,7 @@ public virtual Task UploadBytesPart(ByteArrayPart bytes)
}
///
- public virtual Task UploadString(string someString)
+ Task IRunscopeApi.UploadString(string someString)
{
var arguments = new object[] { someString };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadString", new Type[] { typeof(string) });
@@ -954,7 +1060,7 @@ public virtual Task UploadString(string someString)
}
///
- public virtual Task UploadFileInfo(IEnumerable fileInfos,FileInfo anotherFile)
+ Task IRunscopeApi.UploadFileInfo(IEnumerable fileInfos,FileInfo anotherFile)
{
var arguments = new object[] { fileInfos,anotherFile };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadFileInfo", new Type[] { typeof(IEnumerable),typeof(FileInfo) });
@@ -962,7 +1068,7 @@ public virtual Task UploadFileInfo(IEnumerable fi
}
///
- public virtual Task UploadFileInfoPart(IEnumerable fileInfos,FileInfoPart anotherFile)
+ Task IRunscopeApi.UploadFileInfoPart(IEnumerable fileInfos,FileInfoPart anotherFile)
{
var arguments = new object[] { fileInfos,anotherFile };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadFileInfoPart", new Type[] { typeof(IEnumerable),typeof(FileInfoPart) });
@@ -970,7 +1076,7 @@ public virtual Task UploadFileInfoPart(IEnumerable
- public virtual Task UploadJsonObject(ModelObject theObject)
+ Task IRunscopeApi.UploadJsonObject(ModelObject theObject)
{
var arguments = new object[] { theObject };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadJsonObject", new Type[] { typeof(ModelObject) });
@@ -978,7 +1084,7 @@ public virtual Task UploadJsonObject(ModelObject theObject)
}
///
- public virtual Task UploadJsonObjects(IEnumerable theObjects)
+ Task IRunscopeApi.UploadJsonObjects(IEnumerable theObjects)
{
var arguments = new object[] { theObjects };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadJsonObjects", new Type[] { typeof(IEnumerable) });
@@ -986,7 +1092,7 @@ public virtual Task UploadJsonObjects(IEnumerable
- public virtual Task UploadMixedObjects(IEnumerable theObjects,AnotherModel anotherModel,FileInfo aFile,AnEnum anEnum,string aString,int anInt)
+ Task IRunscopeApi.UploadMixedObjects(IEnumerable theObjects,AnotherModel anotherModel,FileInfo aFile,AnEnum anEnum,string aString,int anInt)
{
var arguments = new object[] { theObjects,anotherModel,aFile,anEnum,aString,anInt };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadMixedObjects", new Type[] { typeof(IEnumerable),typeof(AnotherModel),typeof(FileInfo),typeof(AnEnum),typeof(string),typeof(int) });
@@ -994,7 +1100,7 @@ public virtual Task UploadMixedObjects(IEnumerable
- public virtual Task UploadHttpContent(HttpContent content)
+ Task IRunscopeApi.UploadHttpContent(HttpContent content)
{
var arguments = new object[] { content };
var func = requestBuilder.BuildRestResultFuncForMethod("UploadHttpContent", new Type[] { typeof(HttpContent) });
@@ -1026,7 +1132,7 @@ public AutoGeneratedIServiceWithoutNamespace(HttpClient client, IRequestBuilder
}
///
- public virtual Task GetRoot()
+ Task IServiceWithoutNamespace.GetRoot()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("GetRoot", new Type[] { });
@@ -1034,7 +1140,7 @@ public virtual Task GetRoot()
}
///
- public virtual Task PostRoot()
+ Task IServiceWithoutNamespace.PostRoot()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("PostRoot", new Type[] { });
@@ -1066,7 +1172,7 @@ public AutoGeneratedIStreamApi(HttpClient client, IRequestBuilder requestBuilder
}
///
- public virtual Task GetRemoteFile(string filename)
+ Task IStreamApi.GetRemoteFile(string filename)
{
var arguments = new object[] { filename };
var func = requestBuilder.BuildRestResultFuncForMethod("GetRemoteFile", new Type[] { typeof(string) });
@@ -1074,7 +1180,7 @@ public virtual Task GetRemoteFile(string filename)
}
///
- public virtual Task> GetRemoteFileWithMetadata(string filename)
+ Task> IStreamApi.GetRemoteFileWithMetadata(string filename)
{
var arguments = new object[] { filename };
var func = requestBuilder.BuildRestResultFuncForMethod("GetRemoteFileWithMetadata", new Type[] { typeof(string) });
@@ -1106,7 +1212,7 @@ public AutoGeneratedITrimTrailingForwardSlashApi(HttpClient client, IRequestBuil
}
///
- public virtual Task Get()
+ Task ITrimTrailingForwardSlashApi.Get()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { });
@@ -1142,7 +1248,7 @@ public AutoGeneratedIUseOverloadedGenericMethods(HttpClient client, IRequestBuil
}
///
- public virtual Task Get()
+ Task IUseOverloadedGenericMethods.Get()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { });
@@ -1150,7 +1256,7 @@ public virtual Task Get()
}
///
- public virtual Task Get(TParam param,THeader header)
+ Task IUseOverloadedGenericMethods.Get(TParam param,THeader header)
{
var arguments = new object[] { param,header };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(TParam),typeof(THeader) });
@@ -1158,7 +1264,7 @@ public virtual Task Get(TParam param,THeader header)
}
///
- public virtual Task Get(THeader param,TParam header)
+ Task IUseOverloadedGenericMethods.Get(THeader param,TParam header)
{
var arguments = new object[] { param,header };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(THeader),typeof(TParam) });
@@ -1166,7 +1272,7 @@ public virtual Task Get(THeader param,TParam header)
}
///
- public virtual Task Get(int httpstatuscode)
+ Task IUseOverloadedGenericMethods.Get(int httpstatuscode)
{
var arguments = new object[] { httpstatuscode };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(int) });
@@ -1174,8 +1280,7 @@ public virtual Task Get(int httpstatuscode)
}
///
- public virtual Task Get
- (int someVal)
+ Task IUseOverloadedGenericMethods.Get(int someVal)
{
var arguments = new object[] { someVal };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(int) }, new Type[] { typeof(TValue) });
@@ -1183,8 +1288,7 @@ public virtual Task Get
}
///
- public virtual Task Get
- (TInput input)
+ Task IUseOverloadedGenericMethods.Get(TInput input)
{
var arguments = new object[] { input };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(TInput) }, new Type[] { typeof(TValue), typeof(TInput) });
@@ -1192,8 +1296,7 @@ public virtual Task Get
}
///
- public virtual Task Get
- (TInput1 input1,TInput2 input2)
+ Task IUseOverloadedGenericMethods.Get(TInput1 input1,TInput2 input2)
{
var arguments = new object[] { input1,input2 };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(TInput1),typeof(TInput2) }, new Type[] { typeof(TInput1), typeof(TInput2) });
@@ -1225,7 +1328,7 @@ public AutoGeneratedIUseOverloadedMethods(HttpClient client, IRequestBuilder req
}
///
- public virtual Task Get()
+ Task IUseOverloadedMethods.Get()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { });
@@ -1233,7 +1336,7 @@ public virtual Task Get()
}
///
- public virtual Task Get(int httpstatuscode)
+ Task IUseOverloadedMethods.Get(int httpstatuscode)
{
var arguments = new object[] { httpstatuscode };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { typeof(int) });
@@ -1265,7 +1368,7 @@ public AutoGeneratedIValidApi(HttpClient client, IRequestBuilder requestBuilder)
}
///
- public virtual Task Get()
+ Task IValidApi.Get()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { });
diff --git a/Refit.Tests/RefitStubs.NetCore2.cs b/Refit.Tests/RefitStubs.NetCore2.cs
index fda73a626..f3d0ad3d3 100644
--- a/Refit.Tests/RefitStubs.NetCore2.cs
+++ b/Refit.Tests/RefitStubs.NetCore2.cs
@@ -73,7 +73,7 @@ public AutoGeneratedIAmARefitInterfaceButNobodyUsesMe(HttpClient client, IReques
}
///
- public virtual Task RefitMethod()
+ Task IAmARefitInterfaceButNobodyUsesMe.RefitMethod()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("RefitMethod", new Type[] { });
@@ -81,7 +81,7 @@ public virtual Task RefitMethod()
}
///
- public virtual Task AnotherRefitMethod()
+ Task IAmARefitInterfaceButNobodyUsesMe.AnotherRefitMethod()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("AnotherRefitMethod", new Type[] { });
@@ -89,13 +89,13 @@ public virtual Task AnotherRefitMethod()
}
///
- public virtual Task NoConstantsAllowed()
+ Task IAmARefitInterfaceButNobodyUsesMe.NoConstantsAllowed()
{
throw new NotImplementedException("Either this method has no Refit HTTP method attribute or you've used something other than a string literal for the 'path' argument.");
}
///
- public virtual Task SpacesShouldntBreakMe()
+ Task IAmARefitInterfaceButNobodyUsesMe.SpacesShouldntBreakMe()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("SpacesShouldntBreakMe", new Type[] { });
@@ -103,7 +103,7 @@ public virtual Task SpacesShouldntBreakMe()
}
///
- public virtual Task ReservedWordsForParameterNames(int @int,string @string,float @long)
+ Task IAmARefitInterfaceButNobodyUsesMe.ReservedWordsForParameterNames(int @int,string @string,float @long)
{
var arguments = new object[] { @int,@string,@long };
var func = requestBuilder.BuildRestResultFuncForMethod("ReservedWordsForParameterNames", new Type[] { typeof(int),typeof(string),typeof(float) });
@@ -135,7 +135,7 @@ public AutoGeneratedIAmHalfRefit(HttpClient client, IRequestBuilder requestBuild
}
///
- public virtual Task Post()
+ Task IAmHalfRefit.Post()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Post", new Type[] { });
@@ -143,13 +143,125 @@ public virtual Task Post()
}
///
- public virtual Task Get()
+ Task IAmHalfRefit.Get()
{
throw new NotImplementedException("Either this method has no Refit HTTP method attribute or you've used something other than a string literal for the 'path' argument.");
}
}
}
+namespace Refit.Tests
+{
+ using Refit.Tests.RefitInternalGenerated;
+
+ ///
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ [global::System.Diagnostics.DebuggerNonUserCode]
+ [Preserve]
+ [global::System.Reflection.Obfuscation(Exclude=true)]
+ partial class AutoGeneratedIAmInterfaceA : IAmInterfaceA
+ {
+ ///
+ public HttpClient Client { get; protected set; }
+ readonly IRequestBuilder requestBuilder;
+
+ ///
+ public AutoGeneratedIAmInterfaceA(HttpClient client, IRequestBuilder requestBuilder)
+ {
+ Client = client;
+ this.requestBuilder = requestBuilder;
+ }
+
+ ///
+ Task IAmInterfaceA.Ping()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Ping", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+ }
+}
+
+namespace Refit.Tests
+{
+ using Refit.Tests.RefitInternalGenerated;
+
+ ///
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ [global::System.Diagnostics.DebuggerNonUserCode]
+ [Preserve]
+ [global::System.Reflection.Obfuscation(Exclude=true)]
+ partial class AutoGeneratedIAmInterfaceB : IAmInterfaceB
+ {
+ ///
+ public HttpClient Client { get; protected set; }
+ readonly IRequestBuilder requestBuilder;
+
+ ///
+ public AutoGeneratedIAmInterfaceB(HttpClient client, IRequestBuilder requestBuilder)
+ {
+ Client = client;
+ this.requestBuilder = requestBuilder;
+ }
+
+ ///
+ Task IAmInterfaceB.Pong()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Pong", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+ }
+}
+
+namespace Refit.Tests
+{
+ using Refit.Tests.RefitInternalGenerated;
+
+ ///
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ [global::System.Diagnostics.DebuggerNonUserCode]
+ [Preserve]
+ [global::System.Reflection.Obfuscation(Exclude=true)]
+ partial class AutoGeneratedIAmInterfaceC : IAmInterfaceC
+ {
+ ///
+ public HttpClient Client { get; protected set; }
+ readonly IRequestBuilder requestBuilder;
+
+ ///
+ public AutoGeneratedIAmInterfaceC(HttpClient client, IRequestBuilder requestBuilder)
+ {
+ Client = client;
+ this.requestBuilder = requestBuilder;
+ }
+
+ ///
+ Task IAmInterfaceC.Pang()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Pang", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+
+ ///
+ Task IAmInterfaceA.Ping()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Ping", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+
+ ///
+ Task IAmInterfaceB.Pong()
+ {
+ var arguments = new object[] { };
+ var func = requestBuilder.BuildRestResultFuncForMethod("Pong", new Type[] { });
+ return (Task)func(Client, arguments);
+ }
+ }
+}
+
namespace Refit.Tests
{
using Refit.Tests.RefitInternalGenerated;
@@ -173,7 +285,7 @@ public AutoGeneratedIApiWithDecimal(HttpClient client, IRequestBuilder requestBu
}
///
- public virtual Task GetWithDecimal(decimal value)
+ Task IApiWithDecimal.GetWithDecimal(decimal value)
{
var arguments = new object[] { value };
var func = requestBuilder.BuildRestResultFuncForMethod("GetWithDecimal", new Type[] { typeof(decimal) });
@@ -205,7 +317,7 @@ public AutoGeneratedIBodylessApi(HttpClient client, IRequestBuilder requestBuild
}
///
- public virtual Task Post()
+ Task IBodylessApi.Post()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Post", new Type[] { });
@@ -213,7 +325,7 @@ public virtual Task Post()
}
///
- public virtual Task Get()
+ Task IBodylessApi.Get()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Get", new Type[] { });
@@ -221,7 +333,7 @@ public virtual Task Get()
}
///
- public virtual Task Head()
+ Task IBodylessApi.Head()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("Head", new Type[] { });
@@ -256,7 +368,7 @@ public AutoGeneratedIBoringCrudApi(HttpClient client, IRequestBuilder requestBui
}
///
- public virtual Task Create(T paylod)
+ Task IBoringCrudApi.Create(T paylod)
{
var arguments = new object[] { paylod };
var func = requestBuilder.BuildRestResultFuncForMethod("Create", new Type[] { typeof(T) });
@@ -264,7 +376,7 @@ public virtual Task Create(T paylod)
}
///
- public virtual Task> ReadAll()
+ Task> IBoringCrudApi.ReadAll()
{
var arguments = new object[] { };
var func = requestBuilder.BuildRestResultFuncForMethod("ReadAll", new Type[] { });
@@ -272,7 +384,7 @@ public virtual Task> ReadAll()
}
///
- public virtual Task ReadOne(TKey key)
+ Task IBoringCrudApi.ReadOne(TKey key)
{
var arguments = new object[] { key };
var func = requestBuilder.BuildRestResultFuncForMethod("ReadOne", new Type[] { typeof(TKey) });
@@ -280,7 +392,7 @@ public virtual Task ReadOne(TKey key)
}
///