diff --git a/ConfigurationTests/ConfigurationTests.csproj b/ConfigurationTests/ConfigurationTests.csproj index c638033..8c4b742 100644 --- a/ConfigurationTests/ConfigurationTests.csproj +++ b/ConfigurationTests/ConfigurationTests.csproj @@ -5,6 +5,10 @@ netcoreapp2.2 + + + + diff --git a/ConfigurationTests/Program.cs b/ConfigurationTests/Program.cs index 233b626..3c29227 100644 --- a/ConfigurationTests/Program.cs +++ b/ConfigurationTests/Program.cs @@ -1,11 +1,15 @@ -using System; +using BaGet.Protocol; +using NuGet.Versioning; +using System; +using System.IO; +using System.Net; +using System.Net.Http; using ZeroLevel; namespace ConfigurationTests { class Program - { - + { static void Main(string[] args) { var config = Configuration.ReadSetFromIniFile("config.ini").Bind(); diff --git a/ZeroLevel.sln b/ZeroLevel.sln index a074370..7114111 100644 --- a/ZeroLevel.sln +++ b/ZeroLevel.sln @@ -33,7 +33,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZeroNetworkMonitor", "ZeroN EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConfigurationTests", "ConfigurationTests\ConfigurationTests.csproj", "{E37785CE-E75A-49FB-B17F-16A0F2C6D656}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyInjectionTests", "DependencyInjectionTests\DependencyInjectionTests.csproj", "{665B38E3-A5F2-4AD0-946B-209D80C1AA40}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjectionTests", "DependencyInjectionTests\DependencyInjectionTests.csproj", "{665B38E3-A5F2-4AD0-946B-209D80C1AA40}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/ZeroLevel/Services/Config/BaseConfiguration.cs b/ZeroLevel/Services/Config/BaseConfiguration.cs index 066dac5..990de06 100644 --- a/ZeroLevel/Services/Config/BaseConfiguration.cs +++ b/ZeroLevel/Services/Config/BaseConfiguration.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Net; using ZeroLevel.Services.Collections; using ZeroLevel.Services.ObjectMapping; using ZeroLevel.Services.Reflection; @@ -501,6 +502,26 @@ namespace ZeroLevel.Services.Config } member.Setter(instance, collectionBuilder.Complete()); } + else if (TypeHelpers.IsEnum(member.ClrType)) + { + var value = Enum.Parse(member.ClrType, First(member.Name)); + member.Setter(instance, value); + } + else if (TypeHelpers.IsUri(member.ClrType)) + { + var uri = new Uri(First(member.Name)); + member.Setter(instance, uri); + } + else if (TypeHelpers.IsIpEndPoint(member.ClrType)) + { + var ep = ZeroLevel.Network.NetUtils.CreateIPEndPoint(First(member.Name)); + member.Setter(instance, ep); + } + else if (member.ClrType == typeof(IPAddress)) + { + var ip = IPAddress.Parse(First(member.Name)); + member.Setter(instance, ip); + } else { member.Setter(instance, First(member.Name)); diff --git a/ZeroLevel/Services/Extensions/EnumerableExtensions.cs b/ZeroLevel/Services/Extensions/EnumerableExtensions.cs index 2da284e..4acd2fc 100644 --- a/ZeroLevel/Services/Extensions/EnumerableExtensions.cs +++ b/ZeroLevel/Services/Extensions/EnumerableExtensions.cs @@ -31,22 +31,5 @@ namespace ZeroLevel { return !IsEmpty(collection); } - - public static IEnumerable> Chunkify(this IEnumerable source, int size) - { - if (source == null) - { - yield break; - } - if (size <= 0) - { - throw new ArgumentException("chunkSize must be greater than 0."); - } - while (source.Any()) - { - yield return source.Take(size); - source = source.Skip(size); - } - } } } \ No newline at end of file diff --git a/ZeroLevel/Services/Extensions/LinqExtension.cs b/ZeroLevel/Services/Extensions/LinqExtension.cs index 72e178a..ebe42f5 100644 --- a/ZeroLevel/Services/Extensions/LinqExtension.cs +++ b/ZeroLevel/Services/Extensions/LinqExtension.cs @@ -1,7 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; -namespace ZeroLevel +namespace System.Linq { public static class LinqExtension { @@ -20,5 +19,35 @@ namespace ZeroLevel } } } + + public static IList Materialize(this IEnumerable source) + { + if (source is IList) + { + // Already a list, use it as is + return (IList)source; + } + else + { + // Not a list, materialize it to a list + return source.ToList(); + } + } + public static IEnumerable> Chunkify(this IEnumerable source, int size) + { + if (source == null) + { + yield break; + } + if (size <= 0) + { + throw new ArgumentException("chunkSize must be greater than 0."); + } + while (source.Any()) + { + yield return source.Take(size); + source = source.Skip(size); + } + } } } \ No newline at end of file diff --git a/ZeroLevel/Services/Reflection/TypeHelpers.cs b/ZeroLevel/Services/Reflection/TypeHelpers.cs index c1679f3..9d0ebed 100644 --- a/ZeroLevel/Services/Reflection/TypeHelpers.cs +++ b/ZeroLevel/Services/Reflection/TypeHelpers.cs @@ -28,6 +28,11 @@ namespace ZeroLevel.Services.Reflection return IsAssignableToGenericType(baseType, genericType); } + public static bool IsEnum(Type type) + { + return type.Return(t => t.IsEnum, false); + } + public static bool IsArray(Type type) { return type.Return(t => t.IsArray, false); diff --git a/ZeroLevel/Services/Serialization/ISerializer.cs b/ZeroLevel/Services/Serialization/ISerializer.cs new file mode 100644 index 0000000..b9a085f --- /dev/null +++ b/ZeroLevel/Services/Serialization/ISerializer.cs @@ -0,0 +1,8 @@ +namespace ZeroLevel.Services.Serialization +{ + public interface ISerializer + { + void Serialize(IBinaryWriter writer); + object Deserialize(IBinaryReader writer); + } +} \ No newline at end of file diff --git a/ZeroLevel/Services/Serialization/MessageSerializer.cs b/ZeroLevel/Services/Serialization/MessageSerializer.cs index 89b80fa..b28cd10 100644 --- a/ZeroLevel/Services/Serialization/MessageSerializer.cs +++ b/ZeroLevel/Services/Serialization/MessageSerializer.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; namespace ZeroLevel.Services.Serialization diff --git a/ZeroLevel/ZeroLevel.csproj b/ZeroLevel/ZeroLevel.csproj index e570fa0..af275d9 100644 --- a/ZeroLevel/ZeroLevel.csproj +++ b/ZeroLevel/ZeroLevel.csproj @@ -6,17 +6,16 @@ ogoun ogoun - 3.1.5.0 - Append Configuration and ConfigurationSet Bind to object -Append runtime collection and array builders (CollectionFactory) + 3.1.6.0 + Fixes https://github.com/ogoun/Zero/wiki Copyright Ogoun 2019 https://opensource.org/licenses/MIT https://raw.githubusercontent.com/ogoun/Zero/master/zero.png https://github.com/ogoun/Zero GitHub - 3.1.5 - 3.1.5.0 + 3.1.6 + 3.1.6.0 AnyCPU;x64