diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index b53da50..42173e4 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -3,10 +3,11 @@ true - - - - + + + + + @@ -14,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/GenericQueryable/Fetching/FetchPath.cs b/src/GenericQueryable.Abstractions/Fetching/FetchPath.cs similarity index 100% rename from src/GenericQueryable/Fetching/FetchPath.cs rename to src/GenericQueryable.Abstractions/Fetching/FetchPath.cs diff --git a/src/GenericQueryable/Fetching/FetchRule.cs b/src/GenericQueryable.Abstractions/Fetching/FetchRule.cs similarity index 100% rename from src/GenericQueryable/Fetching/FetchRule.cs rename to src/GenericQueryable.Abstractions/Fetching/FetchRule.cs diff --git a/src/GenericQueryable/Fetching/IFetchService.cs b/src/GenericQueryable.Abstractions/Fetching/IFetchService.cs similarity index 100% rename from src/GenericQueryable/Fetching/IFetchService.cs rename to src/GenericQueryable.Abstractions/Fetching/IFetchService.cs diff --git a/src/GenericQueryable/Fetching/IPropertyFetchRule.cs b/src/GenericQueryable.Abstractions/Fetching/IPropertyFetchRule.cs similarity index 100% rename from src/GenericQueryable/Fetching/IPropertyFetchRule.cs rename to src/GenericQueryable.Abstractions/Fetching/IPropertyFetchRule.cs diff --git a/src/GenericQueryable/Fetching/PropertyFetchRule.cs b/src/GenericQueryable.Abstractions/Fetching/PropertyFetchRule.cs similarity index 100% rename from src/GenericQueryable/Fetching/PropertyFetchRule.cs rename to src/GenericQueryable.Abstractions/Fetching/PropertyFetchRule.cs diff --git a/src/GenericQueryable/Fetching/UntypedFetchRule.cs b/src/GenericQueryable.Abstractions/Fetching/UntypedFetchRule.cs similarity index 100% rename from src/GenericQueryable/Fetching/UntypedFetchRule.cs rename to src/GenericQueryable.Abstractions/Fetching/UntypedFetchRule.cs diff --git a/src/GenericQueryable.Abstractions/GenericQueryable.Abstractions.csproj b/src/GenericQueryable.Abstractions/GenericQueryable.Abstractions.csproj new file mode 100644 index 0000000..6921ac2 --- /dev/null +++ b/src/GenericQueryable.Abstractions/GenericQueryable.Abstractions.csproj @@ -0,0 +1,12 @@ + + + + IvAt.GenericQueryable.Abstractions + GenericQueryable + + + + + + + diff --git a/src/GenericQueryable/GenericQueryableExtensions.cs b/src/GenericQueryable.Abstractions/GenericQueryableExtensions.cs similarity index 100% rename from src/GenericQueryable/GenericQueryableExtensions.cs rename to src/GenericQueryable.Abstractions/GenericQueryableExtensions.cs diff --git a/src/GenericQueryable/GenericQueryableFetchExtensions.cs b/src/GenericQueryable.Abstractions/GenericQueryableFetchExtensions.cs similarity index 100% rename from src/GenericQueryable/GenericQueryableFetchExtensions.cs rename to src/GenericQueryable.Abstractions/GenericQueryableFetchExtensions.cs diff --git a/src/GenericQueryable/PropertyFetchRuleExtensions.cs b/src/GenericQueryable.Abstractions/PropertyFetchRuleExtensions.cs similarity index 100% rename from src/GenericQueryable/PropertyFetchRuleExtensions.cs rename to src/GenericQueryable.Abstractions/PropertyFetchRuleExtensions.cs diff --git a/src/GenericQueryable/Services/AsyncEnumerableMethodExtractor.cs b/src/GenericQueryable.Abstractions/Services/AsyncEnumerableMethodExtractor.cs similarity index 100% rename from src/GenericQueryable/Services/AsyncEnumerableMethodExtractor.cs rename to src/GenericQueryable.Abstractions/Services/AsyncEnumerableMethodExtractor.cs diff --git a/src/GenericQueryable/Services/AsyncEnumerableMethodRedirector.cs b/src/GenericQueryable.Abstractions/Services/AsyncEnumerableMethodRedirector.cs similarity index 100% rename from src/GenericQueryable/Services/AsyncEnumerableMethodRedirector.cs rename to src/GenericQueryable.Abstractions/Services/AsyncEnumerableMethodRedirector.cs diff --git a/src/GenericQueryable/Services/GenericQueryableExecutor.cs b/src/GenericQueryable.Abstractions/Services/GenericQueryableExecutor.cs similarity index 100% rename from src/GenericQueryable/Services/GenericQueryableExecutor.cs rename to src/GenericQueryable.Abstractions/Services/GenericQueryableExecutor.cs diff --git a/src/GenericQueryable/Services/IGenericQueryProvider.cs b/src/GenericQueryable.Abstractions/Services/IGenericQueryProvider.cs similarity index 100% rename from src/GenericQueryable/Services/IGenericQueryProvider.cs rename to src/GenericQueryable.Abstractions/Services/IGenericQueryProvider.cs diff --git a/src/GenericQueryable/Services/IGenericQueryableExecutor.cs b/src/GenericQueryable.Abstractions/Services/IGenericQueryableExecutor.cs similarity index 100% rename from src/GenericQueryable/Services/IGenericQueryableExecutor.cs rename to src/GenericQueryable.Abstractions/Services/IGenericQueryableExecutor.cs diff --git a/src/GenericQueryable/Services/IMethodRedirector.cs b/src/GenericQueryable.Abstractions/Services/IMethodRedirector.cs similarity index 100% rename from src/GenericQueryable/Services/IMethodRedirector.cs rename to src/GenericQueryable.Abstractions/Services/IMethodRedirector.cs diff --git a/src/GenericQueryable/Services/ITargetMethodExtractor.cs b/src/GenericQueryable.Abstractions/Services/ITargetMethodExtractor.cs similarity index 100% rename from src/GenericQueryable/Services/ITargetMethodExtractor.cs rename to src/GenericQueryable.Abstractions/Services/ITargetMethodExtractor.cs diff --git a/src/GenericQueryable/Fetching/IgnoreFetchService.cs b/src/GenericQueryable.Abstractions/Services/IgnoreFetchService.cs similarity index 100% rename from src/GenericQueryable/Fetching/IgnoreFetchService.cs rename to src/GenericQueryable.Abstractions/Services/IgnoreFetchService.cs diff --git a/src/GenericQueryable/Services/MethodRedirector.cs b/src/GenericQueryable.Abstractions/Services/MethodRedirector.cs similarity index 100% rename from src/GenericQueryable/Services/MethodRedirector.cs rename to src/GenericQueryable.Abstractions/Services/MethodRedirector.cs diff --git a/src/GenericQueryable/Services/SyncMethodRedirector.cs b/src/GenericQueryable.Abstractions/Services/SyncMethodRedirector.cs similarity index 100% rename from src/GenericQueryable/Services/SyncMethodRedirector.cs rename to src/GenericQueryable.Abstractions/Services/SyncMethodRedirector.cs diff --git a/src/GenericQueryable/Services/SyncTargetMethodExtractor.cs b/src/GenericQueryable.Abstractions/Services/SyncTargetMethodExtractor.cs similarity index 100% rename from src/GenericQueryable/Services/SyncTargetMethodExtractor.cs rename to src/GenericQueryable.Abstractions/Services/SyncTargetMethodExtractor.cs diff --git a/src/GenericQueryable/Services/TargetMethodExtractor.cs b/src/GenericQueryable.Abstractions/Services/TargetMethodExtractor.cs similarity index 100% rename from src/GenericQueryable/Services/TargetMethodExtractor.cs rename to src/GenericQueryable.Abstractions/Services/TargetMethodExtractor.cs diff --git a/src/GenericQueryable.UnitTests/GenericQueryable.UnitTests.csproj b/src/GenericQueryable.UnitTests/GenericQueryable.UnitTests.csproj index 8bfa56f..72a5741 100644 --- a/src/GenericQueryable.UnitTests/GenericQueryable.UnitTests.csproj +++ b/src/GenericQueryable.UnitTests/GenericQueryable.UnitTests.csproj @@ -15,7 +15,7 @@ - + diff --git a/src/GenericQueryable.slnx b/src/GenericQueryable.slnx index c020c8e..b5ca9cf 100644 --- a/src/GenericQueryable.slnx +++ b/src/GenericQueryable.slnx @@ -8,6 +8,7 @@ + diff --git a/src/GenericQueryable/DependencyInjection/GenericQueryableSetup.cs b/src/GenericQueryable/DependencyInjection/GenericQueryableSetup.cs index efa2109..6c0b51e 100644 --- a/src/GenericQueryable/DependencyInjection/GenericQueryableSetup.cs +++ b/src/GenericQueryable/DependencyInjection/GenericQueryableSetup.cs @@ -1,29 +1,51 @@ -using GenericQueryable.Fetching; +using CommonFramework.DependencyInjection; + +using GenericQueryable.Fetching; using GenericQueryable.Services; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; namespace GenericQueryable.DependencyInjection; public class GenericQueryableSetup : IGenericQueryableSetup { - private Type targetMethodExtractorType = typeof(SyncTargetMethodExtractor); - private Type fetchServiceType = typeof(IgnoreFetchService); - private readonly List fetchRuleExpanderTypeList = [typeof(FetchRuleHeaderExpander)]; + private Type targetMethodExtractorType = typeof(SyncTargetMethodExtractor); + + private readonly List fetchRuleExpanderTypeList = []; - private readonly List fetchRuleHeaderInfoList = new(); + private readonly List fetchRuleHeaderInfoList = []; public void Initialize(IServiceCollection services) { - services.AddSingleton(); - services.AddSingleton(); + if (!services.AlreadyInitialized()) + { + services.TryAddSingleton(); + services.TryAddSingleton(); + + services.AddSingleton(); + services.AddKeyedSingleton(RootFetchRuleExpander.Key); + } - services.AddSingleton(typeof(IFetchService), this.fetchServiceType); - services.AddSingleton(typeof(ITargetMethodExtractor), this.targetMethodExtractorType); + if (services.AlreadyInitialized()) + { + services.ReplaceSingleton(typeof(IFetchService), this.fetchServiceType); + } + else + { + services.AddSingleton(typeof(IFetchService), this.fetchServiceType); + } - services.AddKeyedSingleton(RootFetchRuleExpander.Key); + if (services.AlreadyInitialized()) + { + services.ReplaceSingleton(typeof(ITargetMethodExtractor), this.targetMethodExtractorType); + } + else + { + services.AddSingleton(typeof(ITargetMethodExtractor), this.targetMethodExtractorType); + } foreach (var fetchRuleExpanderType in this.fetchRuleExpanderTypeList) { diff --git a/src/GenericQueryable/GenericQueryable.csproj b/src/GenericQueryable/GenericQueryable.csproj index 648f9e5..5b18b6a 100644 --- a/src/GenericQueryable/GenericQueryable.csproj +++ b/src/GenericQueryable/GenericQueryable.csproj @@ -5,8 +5,11 @@ - + + + + diff --git a/src/__SolutionItems/CommonAssemblyInfo.cs b/src/__SolutionItems/CommonAssemblyInfo.cs index 6d3d68b..776f033 100644 --- a/src/__SolutionItems/CommonAssemblyInfo.cs +++ b/src/__SolutionItems/CommonAssemblyInfo.cs @@ -3,7 +3,7 @@ [assembly: AssemblyProduct("GenericQueryable")] [assembly: AssemblyCompany("IvAt")] -[assembly: AssemblyVersion("2.0.6.0")] +[assembly: AssemblyVersion("2.1.4.0")] [assembly: AssemblyInformationalVersion("changes at build")] #if DEBUG