Browse Source

Remove EnvironmentHelper and IParameterTypeComparer.

pull/2951/head
Halil İbrahim Kalkan 7 years ago
parent
commit
af720277e7
  1. 23
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs
  2. 41
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/CrossPlatformParameterTypeComparer.cs
  3. 44
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/EnvironmentHelper.cs
  4. 16
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/IParameterTypeComparer.cs
  5. 14
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ParameterTypeComparer.cs

23
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs

@ -18,8 +18,6 @@ namespace Volo.Abp.Http.Client.DynamicProxying
protected IApiDescriptionCache Cache { get; }
protected IParameterTypeComparer ParameterTypeComparer { get; }
private static readonly JsonSerializerSettings SharedJsonSerializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
@ -27,12 +25,10 @@ namespace Volo.Abp.Http.Client.DynamicProxying
public ApiDescriptionFinder(
IApiDescriptionCache cache,
IDynamicProxyHttpClientFactory httpClientFactory,
IParameterTypeComparer parameterTypeComparer)
IDynamicProxyHttpClientFactory httpClientFactory)
{
Cache = cache;
HttpClientFactory = httpClientFactory;
ParameterTypeComparer = parameterTypeComparer;
CancellationTokenProvider = NullCancellationTokenProvider.Instance;
}
@ -61,7 +57,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
for (int i = 0; i < methodParameters.Length; i++)
{
if (!ParameterTypeComparer.TypeMatches(action.ParametersOnMethod[i], methodParameters[i]))
if (!TypeMatches(action.ParametersOnMethod[i], methodParameters[i]))
{
found = false;
break;
@ -108,5 +104,20 @@ namespace Volo.Abp.Http.Client.DynamicProxying
return (ApplicationApiDescriptionModel)result;
}
}
protected virtual bool TypeMatches(MethodParameterApiDescriptionModel actionParameter, ParameterInfo methodParameter)
{
return NormalizeTypeName(actionParameter.TypeAsString) ==
NormalizeTypeName(methodParameter.ParameterType.GetFullNameWithAssemblyName());
}
protected virtual string NormalizeTypeName(string typeName)
{
const string placeholder = "%COREFX%";
const string netCoreLib = "System.Private.CoreLib";
const string netFxLib = "mscorlib";
return typeName.Replace(netCoreLib, placeholder).Replace(netFxLib, placeholder);
}
}
}

41
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/CrossPlatformParameterTypeComparer.cs

@ -1,41 +0,0 @@
using System;
using System.Reflection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Modeling;
namespace Volo.Abp.Http.Client.DynamicProxying
{
/// <summary>
/// Compares the server-side parameter-type with the local parameter-type considering differences between
/// the .net-core and the traditional .net-framework.
/// Inspired by 'https://github.com/akkadotnet/akka.net/pull/2947/files'
/// </summary>
public class CrossPlatformParameterTypeComparer : ParameterTypeComparer, ITransientDependency
{
const string Placeholder = "%COREFX%";
const string NetCoreLib = "System.Private.CoreLib";
const string NetFxLib = "mscorlib";
static readonly bool runsOnNetFx;
static CrossPlatformParameterTypeComparer()
{
runsOnNetFx = string.IsNullOrEmpty(EnvironmentHelper.RuntimeNetCoreVersion);
}
public override bool TypeMatches(MethodParameterApiDescriptionModel actionParameter, ParameterInfo methodParameter)
{
if (runsOnNetFx)
{
// Compare the server's DotnetCore type relative to the current, traditional framework type
// by replacing framework assemblies with an placeholder string.
return actionParameter.TypeAsString.Replace(NetCoreLib, Placeholder)
== methodParameter.ParameterType.GetFullNameWithAssemblyName().Replace(NetFxLib, Placeholder);
}
else
{
return base.TypeMatches(actionParameter, methodParameter);
}
}
}
}

44
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/EnvironmentHelper.cs

@ -1,44 +0,0 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace Volo.Abp.Http.Client.DynamicProxying
{
/// <summary>
/// Provide helpers to check the environment where the current ABP app is currently running
/// </summary>
static class EnvironmentHelper
{
/// <summary>
/// Initializes the <see cref="EnvironmentHelper"/> class.
/// </summary>
static EnvironmentHelper()
{
RuntimeNetCoreVersion = GetNetCoreVersion();
}
/// <summary>
/// Gets the runtime net core version.
/// </summary>
/// <remarks>
/// If the <see cref="RuntimeNetCoreVersion"/> is null the app is running on a .net Classic environment
/// </remarks>
public static string RuntimeNetCoreVersion { get; }
/// <summary>
/// Gets the net core version.
/// </summary>
static string GetNetCoreVersion()
{
var assembly = typeof(System.Runtime.GCSettings).GetTypeInfo().Assembly;
var assemblyPath = assembly.CodeBase.Split(new[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries);
int netCoreAppIndex = Array.IndexOf(assemblyPath, "Microsoft.NETCore.App");
if (netCoreAppIndex > 0 && netCoreAppIndex < assemblyPath.Length - 2)
{
return assemblyPath[netCoreAppIndex + 1];
}
return null;
}
}
}

16
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/IParameterTypeComparer.cs

@ -1,16 +0,0 @@
using System.Reflection;
using Volo.Abp.Http.Modeling;
namespace Volo.Abp.Http.Client.DynamicProxying
{
public interface IParameterTypeComparer
{
/// <summary>
/// Compares the given parameters.
/// </summary>
/// <param name="actionParameter">The parameter description retrieved from the server (depends on the server's runtime)</param>
/// <param name="methodParameter">The local parameter info (depends on the client's runtime)</param>
/// <returns></returns>
bool TypeMatches(MethodParameterApiDescriptionModel actionParameter, ParameterInfo methodParameter);
}
}

14
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ParameterTypeComparer.cs

@ -1,14 +0,0 @@
using System;
using System.Reflection;
using Volo.Abp.Http.Modeling;
namespace Volo.Abp.Http.Client.DynamicProxying
{
public class ParameterTypeComparer : IParameterTypeComparer
{
public virtual bool TypeMatches(MethodParameterApiDescriptionModel actionParameter, ParameterInfo methodParameter)
{
return actionParameter.TypeAsString == methodParameter.ParameterType.GetFullNameWithAssemblyName();
}
}
}
Loading…
Cancel
Save