From 48b0cf24f164cd566619a9ce47c1175d0bceaf30 Mon Sep 17 00:00:00 2001 From: ENikS Date: Thu, 16 Mar 2023 10:14:42 -0700 Subject: [PATCH] Removed TypeBasedOverride Fixed #201 --- .../Overrides/Contract/DependencyOverride.cs | 59 ++++++++++++------- .../Overrides/Members/FieldOverride.cs | 2 +- .../Overrides/Members/PropertyOverride.cs | 2 +- .../Overrides/Parameters/ParameterOverride.cs | 13 ++-- src/Resolution/Overrides/ResolverOverride.cs | 16 ++--- 5 files changed, 55 insertions(+), 37 deletions(-) diff --git a/src/Resolution/Overrides/Contract/DependencyOverride.cs b/src/Resolution/Overrides/Contract/DependencyOverride.cs index 0fcbef6..6dcd03d 100644 --- a/src/Resolution/Overrides/Contract/DependencyOverride.cs +++ b/src/Resolution/Overrides/Contract/DependencyOverride.cs @@ -31,7 +31,7 @@ public class DependencyOverride : ResolverOverride, /// Type of the /// Value to override with public DependencyOverride(Type contractType, object? value) - : base(Contract.AnyContractName, value, MatchRank.Compatible) => Type = contractType; + : base(Contract.AnyContractName, value) => Type = contractType; /// /// Create an instance of to override @@ -40,7 +40,7 @@ public DependencyOverride(Type contractType, object? value) /// Name of the /// Value to override with public DependencyOverride(string contractName, object? value) - : base(contractName, value, MatchRank.Compatible) + : base(contractName, value) { } @@ -52,7 +52,7 @@ public DependencyOverride(string contractName, object? value) /// Type of the /// Value to override with public DependencyOverride(Type contractType, string? contractName, object? value) - : base(contractName, value, MatchRank.Compatible) => Type = contractType; + : base(contractName, value) => Type = contractType; /// /// Create an instance of to override @@ -63,12 +63,44 @@ public DependencyOverride(Type contractType, string? contractName, object? value /// Type of the /// Value to override with public DependencyOverride(Type? targetType, Type contractType, string? contractName, object? value) - : base(targetType, contractName, value, MatchRank.Compatible) => Type = contractType; + : base(targetType, contractName, value) => Type = contractType; #endregion - #region Match + #region IMatchContract + + /// + public MatchRank RankMatch(ParameterInfo member, Type contractType, string? contractName) + => null != Target && member.Member.DeclaringType != Target + ? MatchRank.NoMatch + : MatchContract(contractType, contractName); + + /// + public MatchRank RankMatch(FieldInfo field, Type contractType, string? contractName) + => null != Target && field.DeclaringType != Target + ? MatchRank.NoMatch + : MatchContract(contractType, contractName); + + /// + public MatchRank RankMatch(PropertyInfo property, Type contractType, string? contractName) + => null != Target && property.DeclaringType != Target + ? MatchRank.NoMatch + : MatchContract(contractType, contractName); + + #endregion + + + #region IEquatable + + /// + public override bool Equals(MatchRank other) + => other >= MatchRank.Compatible; + + #endregion + + + #region Implementation private MatchRank MatchContract(Type contractType, string? contractName) { @@ -87,23 +119,6 @@ private MatchRank MatchContract(Type contractType, string? contractName) return MatchRank.NoMatch; } - - public MatchRank RankMatch(ParameterInfo member, Type contractType, string? contractName) - => null != Target && member.Member.DeclaringType != Target - ? MatchRank.NoMatch - : MatchContract(contractType, contractName); - - public MatchRank RankMatch(FieldInfo field, Type contractType, string? contractName) - => null != Target && field.DeclaringType != Target - ? MatchRank.NoMatch - : MatchContract(contractType, contractName); - - public MatchRank RankMatch(PropertyInfo property, Type contractType, string? contractName) - => null != Target && property.DeclaringType != Target - ? MatchRank.NoMatch - : MatchContract(contractType, contractName); - - #endregion } diff --git a/src/Resolution/Overrides/Members/FieldOverride.cs b/src/Resolution/Overrides/Members/FieldOverride.cs index 4acc1d3..302a5b9 100644 --- a/src/Resolution/Overrides/Members/FieldOverride.cs +++ b/src/Resolution/Overrides/Members/FieldOverride.cs @@ -21,7 +21,7 @@ public class FieldOverride : ResolverOverride, /// InjectionParameterValue to use for the Field. public FieldOverride(string name, object? value) : base(name ?? throw new ArgumentNullException(nameof(name), "Must provide a name of the field to override"), - value, MatchRank.ExactMatch) + value) { } diff --git a/src/Resolution/Overrides/Members/PropertyOverride.cs b/src/Resolution/Overrides/Members/PropertyOverride.cs index 2360f93..fb1be55 100644 --- a/src/Resolution/Overrides/Members/PropertyOverride.cs +++ b/src/Resolution/Overrides/Members/PropertyOverride.cs @@ -21,7 +21,7 @@ public class PropertyOverride : ResolverOverride, /// InjectionParameterValue to use for the property. public PropertyOverride(string name, object? value) : base(name ?? throw new ArgumentNullException(nameof(name), "Must provide a name of the property to override"), - value, MatchRank.ExactMatch) + value) { } diff --git a/src/Resolution/Overrides/Parameters/ParameterOverride.cs b/src/Resolution/Overrides/Parameters/ParameterOverride.cs index 022b114..539c893 100644 --- a/src/Resolution/Overrides/Parameters/ParameterOverride.cs +++ b/src/Resolution/Overrides/Parameters/ParameterOverride.cs @@ -9,7 +9,7 @@ namespace Unity.Resolution; /// A class that lets you /// override a named parameter passed to a constructor. /// -public class ParameterOverride : ResolverOverride, +public class ParameterOverride : ResolverOverride, IMatchInfo { #region Fields @@ -29,7 +29,7 @@ public class ParameterOverride : ResolverOverride, /// Name of the constructor parameter. /// InjectionParameterValue to pass for the constructor. public ParameterOverride(string name, object? value) - : base(name, value, MatchRank.ExactMatch) + : base(name, value) { } @@ -41,7 +41,7 @@ public ParameterOverride(string name, object? value) /// Type of the parameter. /// Value to pass for the MethodBase. public ParameterOverride(Type type, object? value) - : base(null, value, MatchRank.ExactMatch) + : base(null, value) => Type = type; /// @@ -53,7 +53,7 @@ public ParameterOverride(Type type, object? value) /// Name of the parameter. /// Value to pass for the MethodBase. public ParameterOverride(string? name, Type type, object? value) - : base(name, value, MatchRank.ExactMatch) + : base(name, value) => Type = type; /// @@ -65,14 +65,15 @@ public ParameterOverride(string? name, Type type, object? value) /// Name of the constructor parameter. /// Value to pass for the MethodBase. public ParameterOverride(Type parameterType, string parameterName, object value) - : base(null, parameterName, value, MatchRank.ExactMatch) + : base(null, parameterName, value) => Type = parameterType; #endregion - #region Match + #region IMatchInfo + /// public MatchRank RankMatch(ParameterInfo other) { return (Target is null || other.Member.DeclaringType == Target) && diff --git a/src/Resolution/Overrides/ResolverOverride.cs b/src/Resolution/Overrides/ResolverOverride.cs index 82e1ab4..c813f0c 100644 --- a/src/Resolution/Overrides/ResolverOverride.cs +++ b/src/Resolution/Overrides/ResolverOverride.cs @@ -16,7 +16,6 @@ public abstract class ResolverOverride : IEquatable, protected Type? Target; protected readonly string? Name; protected readonly object? Value; - private readonly MatchRank _rank; #endregion @@ -29,11 +28,10 @@ public abstract class ResolverOverride : IEquatable, /// Name of the dependency /// Value to pass to resolver /// Minimal required rank to override - protected ResolverOverride(string? name, object? value, MatchRank rank) + protected ResolverOverride(string? name, object? value) { Name = name; Value = value; - _rank = rank; } /// @@ -43,12 +41,11 @@ protected ResolverOverride(string? name, object? value, MatchRank rank) /// Name of the dependency /// Value to pass to resolver /// Minimal required rank to override - protected ResolverOverride(Type? target, string? name, object? value, MatchRank rank) + protected ResolverOverride(Type? target, string? name, object? value) { Name = name; Value = value; Target = target; - _rank = rank; } #endregion @@ -87,8 +84,13 @@ public ResolverOverride OnType(Type targetType) #region IEquatable - public bool Equals(MatchRank other) - => other >= _rank; + /// + /// Determines if provided rank is adequate to be a match + /// + /// The rank to compare + /// + public virtual bool Equals(MatchRank other) + => other >= MatchRank.ExactMatch; #endregion