add UniquieID abstract base class

This commit is contained in:
2023-08-02 06:39:56 +02:00
parent ef85aea1c5
commit 8fcb6a42d3
2 changed files with 61 additions and 36 deletions

View File

@@ -9,33 +9,8 @@ using System.Threading.Tasks;
namespace Pilz.Cryptography namespace Pilz.Cryptography
{ {
public class UniquieID<TargetType> : IUniquieID public class UniquieID<TargetType> : UniquieID
{ {
private static int currentSimpleID = 0;
[JsonProperty(nameof(ID))]
private string _iD;
[JsonIgnore]
public string ID
{
get
{
if (GenerateOnGet)
GenerateIfNull();
return _iD;
}
internal set
=> _iD = value;
}
[JsonIgnore]
public bool HasID { get => !string.IsNullOrEmpty(_iD); }
[JsonIgnore]
public bool SimpleMode { get; set; } = false;
[JsonIgnore]
public bool GenerateOnGet { get; set; } = false;
public UniquieID() : this(false) public UniquieID() : this(false)
{ {
} }
@@ -46,17 +21,13 @@ namespace Pilz.Cryptography
GenerateIfNull(); GenerateIfNull();
} }
public void Generate() public override void Generate()
{ {
if (SimpleMode) if (SimpleMode)
ID = typeof(TargetType).ToString() + currentSimpleID++.ToString(); ID = typeof(TargetType).ToString() + currentSimpleID++.ToString();
else else
ID = GenerateUniquieID<TargetType>(string.Empty); ID = GenerateUniquieID<TargetType>(string.Empty);
} }
public void GenerateIfNull()
{
if (!HasID) Generate();
}
private static string GenerateUniquieID<T>(string var) private static string GenerateUniquieID<T>(string var)
{ {
@@ -92,14 +63,11 @@ namespace Pilz.Cryptography
return Win32_PhysicalMedia_SerialNumber; return Win32_PhysicalMedia_SerialNumber;
} }
public override string ToString() => ID;
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
var res = false; var res = false;
var iD = obj as UniquieID<TargetType>;
if (iD is object) if (obj is UniquieID<TargetType> iD)
{ {
if (ReferenceEquals(res, iD)) if (ReferenceEquals(res, iD))
res = true; res = true;
@@ -130,7 +98,7 @@ namespace Pilz.Cryptography
public override int GetHashCode() public override int GetHashCode()
{ {
return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD); return base.GetHashCode();
} }
public static implicit operator string(UniquieID<TargetType> id) => id.ID; public static implicit operator string(UniquieID<TargetType> id) => id.ID;

View File

@@ -0,0 +1,57 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace Pilz.Cryptography
{
public abstract class UniquieID : IUniquieID
{
protected static int currentSimpleID = 0;
[JsonProperty(nameof(ID))]
protected string _iD;
[JsonIgnore]
public virtual bool SimpleMode { get; set; } = false;
[JsonIgnore]
public virtual bool GenerateOnGet { get; set; } = false;
[JsonIgnore]
public virtual bool HasID => !string.IsNullOrEmpty(_iD);
[JsonIgnore]
public virtual string ID
{
get
{
if (GenerateOnGet)
GenerateIfNull();
return _iD;
}
internal set
=> _iD = value;
}
public abstract void Generate();
public abstract override bool Equals(object obj);
public virtual void GenerateIfNull()
{
if (!HasID) Generate();
}
public override string ToString() => ID;
public override int GetHashCode()
{
return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD);
}
public static implicit operator string(UniquieID id) => id.ID;
public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
}
}