Skip to content

Ability to load configurations from IConfigurationSection/IConfigurationRoot #397

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 32 commits into from
Oct 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
cdf41d2
Extensions: Configuration reading from new IConfigurationSections
alex-kulakov Aug 12, 2024
eb381bf
Improved session and domain configuration elements
alex-kulakov Aug 27, 2024
ace0243
Added packages and files with test domain configurations
alex-kulakov Aug 27, 2024
4a0c8fc
Improved some configurations
alex-kulakov Aug 27, 2024
81a152a
Add tests for new configuration reading api
alex-kulakov Aug 27, 2024
3f66942
Summaries' improvements
alex-kulakov Aug 28, 2024
2999139
Add XxxOptions for reading configuration
alex-kulakov Aug 29, 2024
551d6c2
ConnectionInfoParser: supports connection strings as dictionary
alex-kulakov Aug 29, 2024
facc593
DomainConfigurationParsers
alex-kulakov Aug 29, 2024
5eec512
DomainConfiguration.Load() implemented
alex-kulakov Aug 29, 2024
bf3516d
Tests for LoggingConfiguration loading
alex-kulakov Sep 17, 2024
925a1b1
Implement Sections-to-LoggingConfiguration parser
alex-kulakov Sep 17, 2024
8d6da21
Made interfaces have their own file
alex-kulakov Sep 23, 2024
b5ad889
IConfigurationSectionParser -> IConfigurationSectionReader
alex-kulakov Sep 23, 2024
aeb639f
Minor changes in main project
alex-kulakov Sep 23, 2024
1b9be6f
DomainConfiguration(IConfigurationRoot) methods
alex-kulakov Sep 23, 2024
beeffe2
Tests' improvements
alex-kulakov Sep 23, 2024
573d124
Fix wrong section names in tests
alex-kulakov Sep 23, 2024
6759bb3
Update package version for NET5 build
alex-kulakov Sep 23, 2024
b6c3adf
Configuration reading based on IConfigurationSectionReader implementa…
alex-kulakov Sep 23, 2024
496f968
Unified place for extension configurations introduced
alex-kulakov Oct 1, 2024
702f885
Tests improved
alex-kulakov Oct 1, 2024
aae8114
Better names for tests of Microsoft.Extensions.Configuration-based co…
alex-kulakov Oct 1, 2024
46620dd
ReadMe files of extensions updated with new configuration examples
alex-kulakov Oct 3, 2024
eb5536e
Fix build
alex-kulakov Oct 3, 2024
6ba683f
Fix some problems in extensions' configuration loading
alex-kulakov Oct 11, 2024
558683f
One version of packages for net5 and net6
alex-kulakov Oct 14, 2024
1d3f310
Fix wrong version of basis assembly
alex-kulakov Oct 14, 2024
0bed3fe
Fixed lost reference to v5.0.0 packages
alex-kulakov Oct 14, 2024
62319d1
Minor changes
alex-kulakov Oct 14, 2024
b38fbc4
Improved ReadMe files of certain extensions
alex-kulakov Oct 15, 2024
b261028
Improve changelog
alex-kulakov Oct 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion ChangeLog/7.1.2_dev.txt
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
[main] Addressed issue when cycles in Entity dependency graph were not detected
[main] Addressed issue when cycles in Entity dependency graph were not detected
[main] Intoduced DomainConfuguration.ExtensionConfigurations as unified configuration storage for extensions' configurations
[main] DomainConfiguration.Load() method now has overloads which gets abstractions from Microsoft.Extensions.Configuration API
[localization] LocalizationConfiguration.Load() method now has overloads which gets abstractions from Microsoft.Extensions.Configuration API
[localization] ConfigureLocalizationExtension() extensions for DomainConfiguration are added, check ReadMe/documentation for examples of usage
[reprocessing] ReprocessingConfiguration.Load() method now has overloads which gets abstractions from Microsoft.Extensions.Configuration API
[reprocessing] ConfigureReprocessingExtension() extensions for DomainConfiguration are added, check ReadMe/documentation for examples of usage
[security] SecurityConfiguration.Load() method now has overloads which gets abstractions from Microsoft.Extensions.Configuration API
[security] ConfigureSecurityExtension() extensions for DomainConfiguration are added, check ReadMe/documentation for examples of usage
53 changes: 53 additions & 0 deletions Extensions/TestCommon/ModernConfigurationTestBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using NUnit.Framework;

namespace TestCommon
{
public abstract class MicrosoftConfigurationTestBase
{
protected enum ConfigTypes
{
Json,
Xml,
}

protected IConfigurationRoot configurationRoot;

protected abstract ConfigTypes ConfigFormat { get; }

protected abstract void AddConfigurationFile(IConfigurationBuilder configurationBuilder);

[OneTimeSetUp]
public virtual void BeforeAllTestsSetUp()
{
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.SetBasePath(Directory.GetCurrentDirectory());
AddConfigurationFile(configurationBuilder);
configurationRoot = (ConfigurationRoot) configurationBuilder.Build();
}

protected void IgnoreIfXml()
{
if (ConfigFormat == ConfigTypes.Xml)
throw new IgnoreException("Not valid for Xml format");
}
protected void IgnoreIfJson()
{
if (ConfigFormat == ConfigTypes.Json)
throw new IgnoreException("Not valid for JSON format");
}

protected IConfigurationSection GetAndCheckConfigurationSection(string sectionName)
{
var section = configurationRoot.GetSection(sectionName);
Assert.That(section, Is.Not.Null);
return section;
}
}
}
9 changes: 3 additions & 6 deletions Extensions/TestCommon/TestCommon.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,13 @@
<AssemblyOriginatorKeyFile>$(ExtensionsKeyFile)</AssemblyOriginatorKeyFile>
</PropertyGroup>
<Import Project="$(SolutionDir)MSBuild\DataObjects.Net.InternalBuild.targets" />
<ItemGroup Condition="'$(TargetFramework)'=='net5.0'">
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net6.0'">
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Orm\Xtensive.Orm.Tests.Framework\Xtensive.Orm.Tests.Framework.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ to server-side UPDATE or DELETE commands.

Prerequisites
-------------
DataObjects.Net 7.0.x (http://dataobjects.net)
DataObjects.Net 7.1.x (http://dataobjects.net)


Examples of usage
Expand Down
135 changes: 135 additions & 0 deletions Extensions/Xtensive.Orm.Localization.Tests/LocalizationSettings.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- No elements, all names should be default-->
<Xtensive.Orm.Localization.Xml.Empty>
</Xtensive.Orm.Localization.Xml.Empty>

<!--Names are empty, all names should be default-->
<Xtensive.Orm.Localization.Xml.NameEmpty>
<DefaultCulture></DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameEmpty>

<Xtensive.Orm.Localization.Xml.NameDefined>
<DefaultCulture>es-ES</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameDefined>

<Xtensive.Orm.Localization.Xml.FaultyValue>
<DefaultCulture>ololo</DefaultCulture>
</Xtensive.Orm.Localization.Xml.FaultyValue>

<!-- Different namings schemes of elements -->
<!-- LC - lower case -->
<!-- UC - upper case -->
<!-- CC - camel case -->
<!-- PC - pascal case-->
<Xtensive.Orm.Localization.Xml.Naming.LC>
<defaultculture>es-ES</defaultculture>
</Xtensive.Orm.Localization.Xml.Naming.LC>

<Xtensive.Orm.Localization.Xml.Naming.UC>
<DEFAULTCULTURE>es-ES</DEFAULTCULTURE>
</Xtensive.Orm.Localization.Xml.Naming.UC>

<Xtensive.Orm.Localization.Xml.Naming.CC>
<defaultCulture>es-ES</defaultCulture>
</Xtensive.Orm.Localization.Xml.Naming.CC>

<Xtensive.Orm.Localization.Xml.Naming.PC>
<DefaultCulture>es-ES</DefaultCulture>
</Xtensive.Orm.Localization.Xml.Naming.PC>

<!-- Cases of mistyping of element names -->
<!-- LC - lower case -->
<!-- UC - upper case -->
<!-- CC - camel case -->
<!-- PC - pascal case-->
<Xtensive.Orm.Localization.Xml.Mistype.LC>
<defailtculture>es-ES</defailtculture>
</Xtensive.Orm.Localization.Xml.Mistype.LC>

<Xtensive.Orm.Localization.Xml.Mistype.UC>
<DEFAILTCULTURE>es-ES</DEFAILTCULTURE>
</Xtensive.Orm.Localization.Xml.Mistype.UC>

<Xtensive.Orm.Localization.Xml.Mistype.CC>
<defailtCulture>es-ES</defailtCulture>
</Xtensive.Orm.Localization.Xml.Mistype.CC>

<Xtensive.Orm.Localization.Xml.Mistype.PC>
<DefailtCulture>es-ES</DefailtCulture>
</Xtensive.Orm.Localization.Xml.Mistype.PC>

<!-- Cases of configuration when service name is represented by Name child node -->
<Xtensive.Orm.Localization.Xml.NameNode.NameEmpty>
<DefaultCulture>
<Name></Name>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.NameEmpty>

<Xtensive.Orm.Localization.Xml.NameNode.Espaniol>
<DefaultCulture>
<Name>es-ES</Name>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.Espaniol>

<Xtensive.Orm.Localization.Xml.NameNode.FaultyValue>
<DefaultCulture>
<Name>ololo</Name>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.FaultyValue>

<Xtensive.Orm.Localization.Xml.NameNode.Naming.LC>
<DefaultCulture>
<name>es-ES</name>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.Naming.LC>

<Xtensive.Orm.Localization.Xml.NameNode.Naming.UC>
<DefaultCulture>
<NAME>es-ES</NAME>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.Naming.UC>

<Xtensive.Orm.Localization.Xml.NameNode.Naming.CC>
<DefaultCulture>
<naMe>es-ES</naMe>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.Naming.CC>

<Xtensive.Orm.Localization.Xml.NameNode.Naming.PC>
<DefaultCulture>
<NaMe>es-ES</NaMe>
</DefaultCulture>
</Xtensive.Orm.Localization.Xml.NameNode.Naming.PC>


<!-- combinations of Xml-specifit cases, mostly old-fashion attributes -->
<Xtensive.Orm.Localization.NameAttribute.NameEmpty>
<defaultCulture name="" />
</Xtensive.Orm.Localization.NameAttribute.NameEmpty>

<Xtensive.Orm.Localization.NameAttribute.None>
<defaultCulture />
</Xtensive.Orm.Localization.NameAttribute.None>

<Xtensive.Orm.Localization.NameAttribute.Defined>
<defaultCulture name="es-ES" />
</Xtensive.Orm.Localization.NameAttribute.Defined>

<Xtensive.Orm.Localization.NameAttribute.FaultyValue>
<defaultCulture name="ololo" />
</Xtensive.Orm.Localization.NameAttribute.FaultyValue>

<Xtensive.Orm.Localization.NameAttribute.LC>
<defaultculture name="es-ES" />
</Xtensive.Orm.Localization.NameAttribute.LC>

<Xtensive.Orm.Localization.NameAttribute.UC>
<DEFAULTCULTURE name="es-ES" />
</Xtensive.Orm.Localization.NameAttribute.UC>

<Xtensive.Orm.Localization.NameAttribute.PC>
<DefaultCulture name="es-ES" />
</Xtensive.Orm.Localization.NameAttribute.PC>

</configuration>
Loading