mirror of https://github.com/abpframework/abp.git
5 changed files with 17 additions and 121 deletions
@ -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); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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…
Reference in new issue