diff --git a/.github/workflows/Publish Flex.Net.yml b/.github/workflows/Publish Flux.yml similarity index 50% rename from .github/workflows/Publish Flex.Net.yml rename to .github/workflows/Publish Flux.yml index ee2acdb..5b54d83 100644 --- a/.github/workflows/Publish Flex.Net.yml +++ b/.github/workflows/Publish Flux.yml @@ -4,7 +4,7 @@ on: repository_dispatch: push: tags: - - "Flex.Net-v[0-9]+.[0-9]+.[0-9]+*" + - "Flux-v[0-9]+.[0-9]+.[0-9]+*" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -26,14 +26,14 @@ jobs: git branch --remote --contains | grep origin/main - name: Set version - run: echo "VERSION=${GITHUB_REF/refs\/tags\/Flex.Net-v/}" >> $GITHUB_ENV + run: echo "VERSION=${GITHUB_REF/refs\/tags\/Flux-v/}" >> $GITHUB_ENV - name: Build run: | - dotnet build Flex.Net.sln --configuration Release /p:Version=${VERSION} - dotnet pack Flex.Net.sln --configuration Release /p:Version=${VERSION} --no-build --output . + dotnet build BitzArt.Flux.sln --configuration Release /p:Version=${VERSION} + dotnet pack BitzArt.Flux.sln --configuration Release /p:Version=${VERSION} --no-build --output . - name: Push run: | - dotnet nuget push Flex.Net.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY} - dotnet nuget push Flex.Net.REST.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY} + dotnet nuget push BitzArt.Flux.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY} + dotnet nuget push BitzArt.Flux.REST.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY} diff --git a/Flex.Net.sln b/BitzArt.Flux.sln similarity index 81% rename from Flex.Net.sln rename to BitzArt.Flux.sln index ae48a03..f10eb05 100644 --- a/Flex.Net.sln +++ b/BitzArt.Flux.sln @@ -3,17 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33213.308 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flex.Net", "src\Flex.Net\Flex.Net.csproj", "{FE9CED3F-83D8-43DA-BB05-93F5807F746E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BitzArt.Flux", "src\BitzArt.Flux\BitzArt.Flux.csproj", "{FE9CED3F-83D8-43DA-BB05-93F5807F746E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flex.Net.REST", "src\Flex.Net.REST\Flex.Net.REST.csproj", "{E78BC020-AC54-4F92-8628-14EE6FF9EDBF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BitzArt.Flux.REST", "src\BitzArt.Flux.REST\BitzArt.Flux.REST.csproj", "{E78BC020-AC54-4F92-8628-14EE6FF9EDBF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A3976FBB-F37A-4468-955D-8B2FCC79ACD0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A0FAE66D-5574-463E-8723-E28ECEE565EE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flex.Net.Tests", "tests\Flex.Net.Tests\Flex.Net.Tests.csproj", "{AEA2C975-E99C-4E44-B121-0CF3D4956732}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BitzArt.Flux.Tests", "tests\BitzArt.Flux.Tests\BitzArt.Flux.Tests.csproj", "{AEA2C975-E99C-4E44-B121-0CF3D4956732}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flex.Net.REST.Tests", "tests\Flex.Net.REST.Tests\Flex.Net.REST.Tests.csproj", "{6A90BCF4-FB3B-4B4A-A992-3D288972B4AF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BitzArt.Flux.REST.Tests", "tests\BitzArt.Flux.REST.Tests\BitzArt.Flux.REST.Tests.csproj", "{6A90BCF4-FB3B-4B4A-A992-3D288972B4AF}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1CF88BCF-544C-463E-A639-594ADE0A9F15}" ProjectSection(SolutionItems) = preProject @@ -23,7 +23,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{ABC1CAE6-C4A2-42AB-8F24-9A32299CC512}" ProjectSection(SolutionItems) = preProject .github\workflows\Tests.yml = .github\workflows\Tests.yml - .github\workflows\Publish Flex.Net.yml = .github\workflows\Publish Flex.Net.yml + .github\workflows\Publish Flux.yml = .github\workflows\Publish Flux.yml EndProjectSection EndProject Global diff --git a/README.md b/README.md index ba8e7fa..9b06bb5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Flex.Net | PRELEASE, Work In Progress +# Flux | PRELEASE, Work In Progress -**Flex.Net** is a universal WebAPI Client. It introduces an intuitive way for your software to communicate with external systems, whether they use REST, SOAP, or something else. +**Flux** is a universal WebAPI Client. It introduces an intuitive way for your software to communicate with external systems, whether they use REST, SOAP, or some other communication standard. **1. Easy Setup: Configure Once, Use Anywhere** @@ -8,11 +8,11 @@ Start by setting up the configuration. Instead of dealing with the intricacies o **2. Natural Interaction: Forget Protocols, Focus on Results** -Once the setup is done, interaction becomes a breeze. With the groundwork laid out, you can focus on getting things done. Fetch data, send updates, or perform other tasks without worrying about HTTP, REST, SOAP, or any other protocol. **Flex.Net** handles the technicalities seamlessly in the background. +Once the setup is done, interaction becomes a breeze. With the groundwork laid out, you can focus on getting things done. Fetch data, send updates, or perform other tasks without worrying about HTTP, REST, SOAP, or any other protocol. **Flux** handles the technicalities seamlessly in the background. **Key Features:** -- **Practical Abstraction:** **Flex.Net** simplifies your workflow by making interactions with external services straightforward. It's not tied to any specific technology – its goal is to make your work easier. +- **Practical Abstraction:** **Flux** simplifies your workflow by making interactions with external services straightforward. It's not tied to any specific technology – its goal is to make your work easier. - **Cleaner Code:** Maintain a clean and organized codebase. With the configuration handling the heavy lifting, your interactions remain consistent and easy to manage. This is Dependency Inversion at it's finest. diff --git a/src/Flex.Net.REST/Flex.Net.REST.csproj b/src/BitzArt.Flux.REST/BitzArt.Flux.REST.csproj similarity index 55% rename from src/Flex.Net.REST/Flex.Net.REST.csproj rename to src/BitzArt.Flux.REST/BitzArt.Flux.REST.csproj index 902b721..3cb3158 100644 --- a/src/Flex.Net.REST/Flex.Net.REST.csproj +++ b/src/BitzArt.Flux.REST/BitzArt.Flux.REST.csproj @@ -1,18 +1,18 @@ - + net7.0 enable enable - Flex + BitzArt.Flux - Flex.Net.Rest + BitzArt.Flux.Rest BitzArt - Flex.Net - REST Api client implementation + Flux - REST Api client implementation MIT git - https://github.com/BitzArt/Flex.Net - https://github.com/BitzArt/Flex.Net + https://github.com/BitzArt/Flux + https://github.com/BitzArt/Flux @@ -20,13 +20,13 @@ - + + <_Parameter1>BitzArt.Flux.REST.Tests + - - <_Parameter1>Flex.Net.REST.Tests - + diff --git a/src/BitzArt.Flux.REST/Extensions/AddEntityExtension.cs b/src/BitzArt.Flux.REST/Extensions/AddEntityExtension.cs new file mode 100644 index 0000000..c6c3575 --- /dev/null +++ b/src/BitzArt.Flux.REST/Extensions/AddEntityExtension.cs @@ -0,0 +1,54 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +public static class AddEntityExtension +{ + public static IFluxRestEntityBuilder AddEntity(this IFluxRestServiceBuilder serviceBuilder, string? endpoint = null) + where TEntity : class + { + var builder = new FluxRestEntityBuilder(serviceBuilder); + + var services = builder.Services; + var provider = builder.Provider; + + provider.AddSignature(new(typeof(TEntity))); + + services.AddScoped(x => + { + var factory = x.GetRequiredService(); + return factory.GetEntityContext(x, builder.EntityOptions); + }); + + if (endpoint is not null) return builder.WithEndpoint(endpoint); + + return builder; + } + + public static IFluxRestEntityBuilder AddEntity(this IFluxRestServiceBuilder serviceBuilder, string? endpoint = null) + where TEntity : class + { + var builder = new FluxRestEntityBuilder(serviceBuilder); + + var services = serviceBuilder.Services; + var provider = serviceBuilder.Provider; + + provider.AddSignature(new(typeof(TEntity), typeof(TKey))); + + services.AddScoped(x => + { + var factory = x.GetRequiredService(); + return factory.GetEntityContext(x, builder.EntityOptions); + }); + + services.AddScoped>(x => + { + var factory = x.GetRequiredService(); + return factory.GetEntityContext(x, builder.EntityOptions); + }); + + if (endpoint is not null) return builder.WithEndpoint(endpoint); + + return builder; + } +} diff --git a/src/BitzArt.Flux.REST/Extensions/IFluxRestServiceBuilderExtensions.cs b/src/BitzArt.Flux.REST/Extensions/IFluxRestServiceBuilderExtensions.cs new file mode 100644 index 0000000..63f5272 --- /dev/null +++ b/src/BitzArt.Flux.REST/Extensions/IFluxRestServiceBuilderExtensions.cs @@ -0,0 +1,20 @@ +using System.Text.Json; + +namespace BitzArt.Flux; + +public static class IFluxRestServiceBuilderExtensions +{ + public static IFluxRestServiceBuilder ConfigureJson(this IFluxRestServiceBuilder builder, Action configure) + { + configure(builder.ServiceOptions.SerializerOptions); + + return builder; + } + + public static IFluxRestServiceBuilder ConfigureHttpClient(this IFluxRestServiceBuilder builder, Action configure) + { + builder.HttpClientConfiguration = configure; + + return builder; + } +} diff --git a/src/Flex.Net.REST/Extensions/UsingRestExtension.cs b/src/BitzArt.Flux.REST/Extensions/UsingRestExtension.cs similarity index 69% rename from src/Flex.Net.REST/Extensions/UsingRestExtension.cs rename to src/BitzArt.Flux.REST/Extensions/UsingRestExtension.cs index 40e9f72..2379ef2 100644 --- a/src/Flex.Net.REST/Extensions/UsingRestExtension.cs +++ b/src/BitzArt.Flux.REST/Extensions/UsingRestExtension.cs @@ -1,12 +1,12 @@ using Microsoft.Extensions.DependencyInjection; -namespace Flex; +namespace BitzArt.Flux; public static class UsingRestExtension { - public static ICommunicatorRestServiceBuilder UsingRest(this ICommunicatorServicePreBuilder prebuilder, string? baseUrl = null) + public static IFluxRestServiceBuilder UsingRest(this IFluxServicePreBuilder prebuilder, string? baseUrl = null) { - var builder = new CommunicatorRestServiceBuilder(prebuilder, baseUrl); + var builder = new FluxRestServiceBuilder(prebuilder, baseUrl); var provider = builder.Provider; builder.Factory.Providers.Add(provider); diff --git a/src/BitzArt.Flux.REST/Extensions/WithEndpointExtension.cs b/src/BitzArt.Flux.REST/Extensions/WithEndpointExtension.cs new file mode 100644 index 0000000..821f118 --- /dev/null +++ b/src/BitzArt.Flux.REST/Extensions/WithEndpointExtension.cs @@ -0,0 +1,20 @@ +namespace BitzArt.Flux; + +public static class WithEndpointExtension +{ + public static IFluxRestEntityBuilder WithEndpoint(this IFluxRestEntityBuilder builder, string endpoint) + where TEntity : class + { + builder.EntityOptions.Endpoint = endpoint; + + return builder; + } + + public static IFluxRestEntityBuilder WithEndpoint(this IFluxRestEntityBuilder builder, string endpoint) + where TEntity : class + { + builder.EntityOptions.Endpoint = endpoint; + + return builder; + } +} diff --git a/src/BitzArt.Flux.REST/Extensions/WithIdEndpointExtension.cs b/src/BitzArt.Flux.REST/Extensions/WithIdEndpointExtension.cs new file mode 100644 index 0000000..0e83a74 --- /dev/null +++ b/src/BitzArt.Flux.REST/Extensions/WithIdEndpointExtension.cs @@ -0,0 +1,68 @@ +namespace BitzArt.Flux; + +public static class WithIdEndpointExtension +{ + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, string endpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key, parameters) => endpoint; + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, string endpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key, parameters) => endpoint; + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, Func getEndpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(); + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, Func getEndpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(); + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, Func getEndpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(key); + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, Func getEndpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(key); + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, Func getEndpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = getEndpoint; + + return builder; + } + + public static IFluxRestEntityBuilder WithIdEndpoint(this IFluxRestEntityBuilder builder, Func getEndpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = getEndpoint; + + return builder; + } +} diff --git a/src/BitzArt.Flux.REST/Interfaces/IFluxRestEntityBuilder.cs b/src/BitzArt.Flux.REST/Interfaces/IFluxRestEntityBuilder.cs new file mode 100644 index 0000000..170236e --- /dev/null +++ b/src/BitzArt.Flux.REST/Interfaces/IFluxRestEntityBuilder.cs @@ -0,0 +1,13 @@ +namespace BitzArt.Flux; + +public interface IFluxRestEntityBuilder : IFluxEntityBuilder, IFluxRestServiceBuilder + where TEntity : class +{ + public FluxRestEntityOptions EntityOptions { get; } +} + +public interface IFluxRestEntityBuilder : IFluxRestEntityBuilder + where TEntity : class +{ + public new FluxRestEntityOptions EntityOptions { get; } +} diff --git a/src/BitzArt.Flux.REST/Interfaces/IFluxRestServiceBuilder.cs b/src/BitzArt.Flux.REST/Interfaces/IFluxRestServiceBuilder.cs new file mode 100644 index 0000000..8092125 --- /dev/null +++ b/src/BitzArt.Flux.REST/Interfaces/IFluxRestServiceBuilder.cs @@ -0,0 +1,7 @@ +namespace BitzArt.Flux; + +public interface IFluxRestServiceBuilder : IFluxServiceBuilder +{ + public FluxRestServiceOptions ServiceOptions { get; } + internal Action? HttpClientConfiguration { get; set; } +} diff --git a/src/BitzArt.Flux.REST/Models/FluxRestEntityBuilder.cs b/src/BitzArt.Flux.REST/Models/FluxRestEntityBuilder.cs new file mode 100644 index 0000000..59d581c --- /dev/null +++ b/src/BitzArt.Flux.REST/Models/FluxRestEntityBuilder.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +internal class FluxRestEntityBuilder : IFluxRestEntityBuilder + where TEntity : class +{ + public IFluxRestServiceBuilder ServiceBuilder { get; init; } + + public IServiceCollection Services => ServiceBuilder.Services; + public IFluxServiceProvider Provider => ServiceBuilder.Provider; + public IFluxServiceFactory Factory => ServiceBuilder.Factory; + public FluxRestServiceOptions ServiceOptions => ServiceBuilder.ServiceOptions; + + public Action? HttpClientConfiguration + { + get => ServiceBuilder.HttpClientConfiguration; + set => ServiceBuilder.HttpClientConfiguration = value; + } + + public FluxRestEntityOptions EntityOptions { get; set; } + + public FluxRestEntityBuilder(IFluxRestServiceBuilder serviceBuilder) + { + ServiceBuilder = serviceBuilder; + EntityOptions = new(); + } +} + +internal class FluxRestEntityBuilder : FluxRestEntityBuilder, IFluxRestEntityBuilder + where TEntity : class +{ + public new FluxRestEntityOptions EntityOptions { get; set; } + + public FluxRestEntityBuilder(IFluxRestServiceBuilder serviceBuilder) : base(serviceBuilder) + { + EntityOptions = new(); + } +} diff --git a/src/Flex.Net.REST/Models/CommunicatorRestEntityContext.cs b/src/BitzArt.Flux.REST/Models/FluxRestEntityContext.cs similarity index 84% rename from src/Flex.Net.REST/Models/CommunicatorRestEntityContext.cs rename to src/BitzArt.Flux.REST/Models/FluxRestEntityContext.cs index fad01f9..800866b 100644 --- a/src/Flex.Net.REST/Models/CommunicatorRestEntityContext.cs +++ b/src/BitzArt.Flux.REST/Models/FluxRestEntityContext.cs @@ -3,17 +3,17 @@ using System.Text.Json; using System.Web; -namespace Flex; +namespace BitzArt.Flux; -internal class CommunicatorRestEntityContext : ICommunicationContext +internal class FluxRestEntityContext : IFluxEntityContext where TEntity : class { internal readonly HttpClient HttpClient; - internal readonly CommunicatorRestServiceOptions ServiceOptions; + internal readonly FluxRestServiceOptions ServiceOptions; internal readonly ILogger _logger; - protected CommunicatorRestEntityOptions _entityOptions; - internal virtual CommunicatorRestEntityOptions EntityOptions + protected FluxRestEntityOptions _entityOptions; + internal virtual FluxRestEntityOptions EntityOptions { get => _entityOptions; set => _entityOptions = value; @@ -55,7 +55,7 @@ private class KeyNotFoundException : Exception public KeyNotFoundException() : base(Msg) { } } - public CommunicatorRestEntityContext(HttpClient httpClient, CommunicatorRestServiceOptions serviceOptions, ILogger logger, CommunicatorRestEntityOptions entityOptions) + public FluxRestEntityContext(HttpClient httpClient, FluxRestServiceOptions serviceOptions, ILogger logger, FluxRestEntityOptions entityOptions) { HttpClient = httpClient; ServiceOptions = serviceOptions; @@ -117,19 +117,19 @@ public virtual async Task GetAsync(object? id, params object[]? paramet } } -internal class CommunicatorRestEntityContext : CommunicatorRestEntityContext, ICommunicationContext +internal class FluxRestEntityContext : FluxRestEntityContext, IFluxEntityContext where TEntity : class { - internal new CommunicatorRestEntityOptions EntityOptions + internal new FluxRestEntityOptions EntityOptions { - get => (CommunicatorRestEntityOptions)_entityOptions; + get => (FluxRestEntityOptions)_entityOptions; set { _entityOptions = value; } } - public CommunicatorRestEntityContext(HttpClient httpClient, CommunicatorRestServiceOptions serviceOptions, ILogger logger, CommunicatorRestEntityOptions entityOptions) + public FluxRestEntityContext(HttpClient httpClient, FluxRestServiceOptions serviceOptions, ILogger logger, FluxRestEntityOptions entityOptions) : base(httpClient, serviceOptions, logger, entityOptions) { EntityOptions = entityOptions; diff --git a/src/Flex.Net.REST/Models/CommunicatorRestEntityOptions.cs b/src/BitzArt.Flux.REST/Models/FluxRestEntityOptions.cs similarity index 75% rename from src/Flex.Net.REST/Models/CommunicatorRestEntityOptions.cs rename to src/BitzArt.Flux.REST/Models/FluxRestEntityOptions.cs index 2490ee8..992d0d6 100644 --- a/src/Flex.Net.REST/Models/CommunicatorRestEntityOptions.cs +++ b/src/BitzArt.Flux.REST/Models/FluxRestEntityOptions.cs @@ -1,6 +1,6 @@ -namespace Flex; +namespace BitzArt.Flux; -public class CommunicatorRestEntityOptions +public class FluxRestEntityOptions where TEntity : class { public string? Endpoint { get; set; } @@ -11,13 +11,13 @@ public class CommunicatorRestEntityOptions set => _getIdEndpointAction = value; } - public CommunicatorRestEntityOptions() + public FluxRestEntityOptions() { GetIdEndpointAction = null; } } -public class CommunicatorRestEntityOptions : CommunicatorRestEntityOptions +public class FluxRestEntityOptions : FluxRestEntityOptions where TEntity : class { public new Func? GetIdEndpointAction @@ -38,7 +38,7 @@ public class CommunicatorRestEntityOptions : CommunicatorRestEnti } } - public CommunicatorRestEntityOptions() + public FluxRestEntityOptions() { GetIdEndpointAction = null; } diff --git a/src/Flex.Net.REST/Models/CommunicatorRestServiceBuilder.cs b/src/BitzArt.Flux.REST/Models/FluxRestServiceBuilder.cs similarity index 52% rename from src/Flex.Net.REST/Models/CommunicatorRestServiceBuilder.cs rename to src/BitzArt.Flux.REST/Models/FluxRestServiceBuilder.cs index 6df0502..1fa8273 100644 --- a/src/Flex.Net.REST/Models/CommunicatorRestServiceBuilder.cs +++ b/src/BitzArt.Flux.REST/Models/FluxRestServiceBuilder.cs @@ -1,16 +1,16 @@ using Microsoft.Extensions.DependencyInjection; -namespace Flex; +namespace BitzArt.Flux; -internal class CommunicatorRestServiceBuilder : ICommunicatorRestServiceBuilder +internal class FluxRestServiceBuilder : IFluxRestServiceBuilder { public IServiceCollection Services { get; private set; } - public ICommunicatorServiceProvider Provider { get; set; } - public ICommunicatorServiceFactory Factory { get; init; } - public CommunicatorRestServiceOptions ServiceOptions { get; init; } + public IFluxServiceProvider Provider { get; set; } + public IFluxServiceFactory Factory { get; init; } + public FluxRestServiceOptions ServiceOptions { get; init; } public Action? HttpClientConfiguration { get; set; } - public CommunicatorRestServiceBuilder(ICommunicatorServicePreBuilder prebuilder, string? baseUrl) + public FluxRestServiceBuilder(IFluxServicePreBuilder prebuilder, string? baseUrl) { Services = prebuilder.Services; Factory = prebuilder.Factory; @@ -18,6 +18,6 @@ public CommunicatorRestServiceBuilder(ICommunicatorServicePreBuilder prebuilder, HttpClientConfiguration = null; if (prebuilder.Name is null) throw new Exception("Missing Name in Communication Service configuration. Consider using .WithName() when configuring external services."); - Provider = new CommunicatorRestServiceProvider(ServiceOptions, prebuilder.Name); + Provider = new FluxRestServiceProvider(ServiceOptions, prebuilder.Name); } } diff --git a/src/Flex.Net.REST/Models/CommunicatorRestServiceOptions.cs b/src/BitzArt.Flux.REST/Models/FluxRestServiceOptions.cs similarity index 64% rename from src/Flex.Net.REST/Models/CommunicatorRestServiceOptions.cs rename to src/BitzArt.Flux.REST/Models/FluxRestServiceOptions.cs index 5f2dc31..bdd3806 100644 --- a/src/Flex.Net.REST/Models/CommunicatorRestServiceOptions.cs +++ b/src/BitzArt.Flux.REST/Models/FluxRestServiceOptions.cs @@ -1,13 +1,13 @@ using System.Text.Json; -namespace Flex; +namespace BitzArt.Flux; -public class CommunicatorRestServiceOptions +public class FluxRestServiceOptions { public string? BaseUrl { get; set; } public JsonSerializerOptions SerializerOptions { get; set; } - public CommunicatorRestServiceOptions(string? baseUrl) + public FluxRestServiceOptions(string? baseUrl) { BaseUrl = baseUrl; SerializerOptions = new JsonSerializerOptions(); diff --git a/src/BitzArt.Flux.REST/Models/FluxRestServiceProvider.cs b/src/BitzArt.Flux.REST/Models/FluxRestServiceProvider.cs new file mode 100644 index 0000000..b88d81e --- /dev/null +++ b/src/BitzArt.Flux.REST/Models/FluxRestServiceProvider.cs @@ -0,0 +1,55 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace BitzArt.Flux; + +internal class FluxRestServiceProvider : IFluxServiceProvider +{ + private readonly ICollection _entitySignatures; + private readonly FluxRestServiceOptions _serviceOptions; + + public string ServiceName { get; private set; } + + public FluxRestServiceProvider(FluxRestServiceOptions options, string serviceName) + { + _serviceOptions = options; + ServiceName = serviceName; + _entitySignatures = new HashSet(); + } + + public void AddSignature(FluxEntitySignature entitySignature) + { + _entitySignatures.Add(entitySignature); + } + + public bool ContainsSignature(FluxEntitySignature entitySignature) + { + return _entitySignatures.Contains(entitySignature); + } + + public IFluxEntityContext GetEntityContext(IServiceProvider services, object? options) + where TEntity : class + { + if (options is not FluxRestEntityOptions optionsCasted) throw new Exception("Wrong options type"); + + var httpClientFactory = services.GetRequiredService(); + var httpClient = httpClientFactory.CreateClient(ServiceName); + var loggerFactory = services.GetRequiredService(); + var logger = loggerFactory.CreateLogger("Flux"); + + return new FluxRestEntityContext(httpClient, _serviceOptions, logger, optionsCasted); + } + + public IFluxEntityContext GetEntityContext(IServiceProvider services, object? options) + where TEntity : class + { + if (options is not FluxRestEntityOptions optionsCasted) throw new Exception("Wrong options type"); + + var httpClientFactory = services.GetRequiredService(); + var httpClient = httpClientFactory.CreateClient(ServiceName); + var loggerFactory = services.GetRequiredService(); + var logger = loggerFactory.CreateLogger("Flux"); + + return new FluxRestEntityContext(httpClient, _serviceOptions, logger, optionsCasted); + } +} \ No newline at end of file diff --git a/src/Flex.Net.REST/Utility/RequestParameterParsingUtility.cs b/src/BitzArt.Flux.REST/Utility/RequestParameterParsingUtility.cs similarity index 98% rename from src/Flex.Net.REST/Utility/RequestParameterParsingUtility.cs rename to src/BitzArt.Flux.REST/Utility/RequestParameterParsingUtility.cs index e51644c..01a7457 100644 --- a/src/Flex.Net.REST/Utility/RequestParameterParsingUtility.cs +++ b/src/BitzArt.Flux.REST/Utility/RequestParameterParsingUtility.cs @@ -2,7 +2,7 @@ using System.Text; using System.Text.RegularExpressions; -namespace Flex; +namespace BitzArt.Flux; internal partial class RequestParameterParsingUtility { diff --git a/src/Flex.Net/Flex.Net.csproj b/src/BitzArt.Flux/BitzArt.Flux.csproj similarity index 77% rename from src/Flex.Net/Flex.Net.csproj rename to src/BitzArt.Flux/BitzArt.Flux.csproj index 42ed279..69d102d 100644 --- a/src/Flex.Net/Flex.Net.csproj +++ b/src/BitzArt.Flux/BitzArt.Flux.csproj @@ -4,15 +4,15 @@ net7.0 enable enable - Flex + BitzArt.Flux - Flex.Net + BitzArt.Flux BitzArt A universal WebApi client MIT git - https://github.com/BitzArt/Flex.Net - https://github.com/BitzArt/Flex.Net + https://github.com/BitzArt/Flux + https://github.com/BitzArt/Flux README.md @@ -32,13 +32,13 @@ - <_Parameter1>Flex.Net.Tests + <_Parameter1>BitzArt.Flux.Tests - <_Parameter1>Flex.Net.REST + <_Parameter1>BitzArt.Flux.REST - <_Parameter1>Flex.Net.REST.Tests + <_Parameter1>BitzArt.Flux.REST.Tests diff --git a/src/BitzArt.Flux/Extensions/AddFluxExtension.cs b/src/BitzArt.Flux/Extensions/AddFluxExtension.cs new file mode 100644 index 0000000..7cef4a4 --- /dev/null +++ b/src/BitzArt.Flux/Extensions/AddFluxExtension.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +public static class AddFluxExtension +{ + public static IServiceCollection AddFlux(this IServiceCollection services, Action configure) + { + var alreadyRegistered = services + .Any(x => x.Lifetime == ServiceLifetime.Singleton && + x.ServiceType == typeof(IFluxServiceFactory)); + + if (alreadyRegistered) throw new FluxAlreadyRegisteredException(); + + var builder = new FluxBuilder(services); + configure(builder); + + var factory = builder.Factory; + services.AddSingleton(factory); + + services.AddScoped(x => new Flux(x)); + + return services; + } + + private class FluxAlreadyRegisteredException : Exception + { + private const string Msg = "Flux is already registered in this IServiceCollection"; + public FluxAlreadyRegisteredException() : base(Msg) { } + } +} diff --git a/src/BitzArt.Flux/Extensions/AddServiceExtension.cs b/src/BitzArt.Flux/Extensions/AddServiceExtension.cs new file mode 100644 index 0000000..559e44c --- /dev/null +++ b/src/BitzArt.Flux/Extensions/AddServiceExtension.cs @@ -0,0 +1,11 @@ +namespace BitzArt.Flux; + +public static class AddServiceExtension +{ + public static IFluxServicePreBuilder AddService(this IFluxBuilder builder, string name) + { + var service = new FluxServicePreBuilder(builder.Services, builder.Factory, name); + + return service; + } +} diff --git a/src/BitzArt.Flux/Interfaces/IFlux.cs b/src/BitzArt.Flux/Interfaces/IFlux.cs new file mode 100644 index 0000000..8acc705 --- /dev/null +++ b/src/BitzArt.Flux/Interfaces/IFlux.cs @@ -0,0 +1,7 @@ +namespace BitzArt.Flux; + +public interface IFlux +{ + IFluxEntityContext Entity() where TEntity : class; + IFluxEntityContext Entity() where TEntity : class; +} \ No newline at end of file diff --git a/src/BitzArt.Flux/Interfaces/IFluxBuilder.cs b/src/BitzArt.Flux/Interfaces/IFluxBuilder.cs new file mode 100644 index 0000000..31ec52b --- /dev/null +++ b/src/BitzArt.Flux/Interfaces/IFluxBuilder.cs @@ -0,0 +1,9 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +public interface IFluxBuilder +{ + internal IFluxServiceFactory Factory { get; } + internal IServiceCollection Services { get; } +} diff --git a/src/BitzArt.Flux/Interfaces/IFluxEntityBuilder.cs b/src/BitzArt.Flux/Interfaces/IFluxEntityBuilder.cs new file mode 100644 index 0000000..517b833 --- /dev/null +++ b/src/BitzArt.Flux/Interfaces/IFluxEntityBuilder.cs @@ -0,0 +1,5 @@ +namespace BitzArt.Flux; + +public interface IFluxEntityBuilder : IFluxServiceBuilder +{ +} diff --git a/src/Flex.Net/Interfaces/ICommunicationContext.cs b/src/BitzArt.Flux/Interfaces/IFluxEntityContext.cs similarity index 59% rename from src/Flex.Net/Interfaces/ICommunicationContext.cs rename to src/BitzArt.Flux/Interfaces/IFluxEntityContext.cs index 1f2a284..be27884 100644 --- a/src/Flex.Net/Interfaces/ICommunicationContext.cs +++ b/src/BitzArt.Flux/Interfaces/IFluxEntityContext.cs @@ -1,14 +1,8 @@ using BitzArt.Pagination; -namespace Flex; +namespace BitzArt.Flux; -public interface ICommunicationContext -{ - ICommunicationContext Entity() where TEntity : class; - ICommunicationContext Entity() where TEntity : class; -} - -public interface ICommunicationContext +public interface IFluxEntityContext where TEntity : class { public Task> GetAllAsync(params object[]? parameters); @@ -17,7 +11,7 @@ public interface ICommunicationContext public Task GetAsync(object? id, params object[]? parameters); } -public interface ICommunicationContext : ICommunicationContext +public interface IFluxEntityContext : IFluxEntityContext where TEntity : class { public Task GetAsync(TKey? id, params object[]? parameters); diff --git a/src/BitzArt.Flux/Interfaces/IFluxServiceBuilder.cs b/src/BitzArt.Flux/Interfaces/IFluxServiceBuilder.cs new file mode 100644 index 0000000..abfdd51 --- /dev/null +++ b/src/BitzArt.Flux/Interfaces/IFluxServiceBuilder.cs @@ -0,0 +1,10 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +public interface IFluxServiceBuilder +{ + internal IServiceCollection Services { get; } + internal IFluxServiceProvider Provider { get; } + internal IFluxServiceFactory Factory { get; } +} \ No newline at end of file diff --git a/src/BitzArt.Flux/Interfaces/IFluxServiceFactory.cs b/src/BitzArt.Flux/Interfaces/IFluxServiceFactory.cs new file mode 100644 index 0000000..ae6201c --- /dev/null +++ b/src/BitzArt.Flux/Interfaces/IFluxServiceFactory.cs @@ -0,0 +1,12 @@ +namespace BitzArt.Flux; + +internal interface IFluxServiceFactory +{ + internal ICollection Providers { get; } + + internal IFluxEntityContext GetEntityContext(IServiceProvider services, object? options) + where TEntity : class; + + internal IFluxEntityContext GetEntityContext(IServiceProvider services, object? options) + where TEntity : class; +} \ No newline at end of file diff --git a/src/Flex.Net/Interfaces/ICommunicatorServicePreBuilder.cs b/src/BitzArt.Flux/Interfaces/IFluxServicePreBuilder.cs similarity index 54% rename from src/Flex.Net/Interfaces/ICommunicatorServicePreBuilder.cs rename to src/BitzArt.Flux/Interfaces/IFluxServicePreBuilder.cs index 91aa92b..24b70c3 100644 --- a/src/Flex.Net/Interfaces/ICommunicatorServicePreBuilder.cs +++ b/src/BitzArt.Flux/Interfaces/IFluxServicePreBuilder.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.DependencyInjection; -namespace Flex; +namespace BitzArt.Flux; -public interface ICommunicatorServicePreBuilder +public interface IFluxServicePreBuilder { internal string? Name { get; set; } internal IServiceCollection Services { get; } - internal ICommunicatorServiceFactory Factory { get; } + internal IFluxServiceFactory Factory { get; } } diff --git a/src/BitzArt.Flux/Interfaces/IFluxServiceProvider.cs b/src/BitzArt.Flux/Interfaces/IFluxServiceProvider.cs new file mode 100644 index 0000000..c70b4a8 --- /dev/null +++ b/src/BitzArt.Flux/Interfaces/IFluxServiceProvider.cs @@ -0,0 +1,15 @@ +namespace BitzArt.Flux; + +internal interface IFluxServiceProvider +{ + internal string ServiceName { get; } + + internal void AddSignature(FluxEntitySignature entitySignature); + internal bool ContainsSignature(FluxEntitySignature entitySignature); + + IFluxEntityContext GetEntityContext(IServiceProvider services, object? options) + where TEntity : class; + + IFluxEntityContext GetEntityContext(IServiceProvider services, object? options) + where TEntity : class; +} \ No newline at end of file diff --git a/src/BitzArt.Flux/Models/Flux.cs b/src/BitzArt.Flux/Models/Flux.cs new file mode 100644 index 0000000..1d73de4 --- /dev/null +++ b/src/BitzArt.Flux/Models/Flux.cs @@ -0,0 +1,21 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +internal class Flux : IFlux +{ + private readonly IServiceProvider _serviceProvider; + + public Flux(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public IFluxEntityContext Entity() + where TEntity : class + => _serviceProvider.GetRequiredService>(); + + public IFluxEntityContext Entity() + where TEntity : class + => _serviceProvider.GetRequiredService>(); +} diff --git a/src/BitzArt.Flux/Models/FluxBuilder.cs b/src/BitzArt.Flux/Models/FluxBuilder.cs new file mode 100644 index 0000000..c6d1bc2 --- /dev/null +++ b/src/BitzArt.Flux/Models/FluxBuilder.cs @@ -0,0 +1,15 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +internal class FluxBuilder : IFluxBuilder +{ + public IServiceCollection Services { get; private set; } + public IFluxServiceFactory Factory { get; init; } + + public FluxBuilder(IServiceCollection services) + { + Services = services; + Factory = new FluxServiceFactory(); + } +} diff --git a/src/BitzArt.Flux/Models/FluxEntitySignature.cs b/src/BitzArt.Flux/Models/FluxEntitySignature.cs new file mode 100644 index 0000000..b565cd2 --- /dev/null +++ b/src/BitzArt.Flux/Models/FluxEntitySignature.cs @@ -0,0 +1,3 @@ +namespace BitzArt.Flux; + +internal record FluxEntitySignature(Type EntityType, Type? KeyType = null); \ No newline at end of file diff --git a/src/Flex.Net/Models/CommunicatorServiceFactory.cs b/src/BitzArt.Flux/Models/FluxServiceFactory.cs similarity index 51% rename from src/Flex.Net/Models/CommunicatorServiceFactory.cs rename to src/BitzArt.Flux/Models/FluxServiceFactory.cs index 1b84ba9..8f0ee50 100644 --- a/src/Flex.Net/Models/CommunicatorServiceFactory.cs +++ b/src/BitzArt.Flux/Models/FluxServiceFactory.cs @@ -1,15 +1,15 @@ -namespace Flex; +namespace BitzArt.Flux; -internal class CommunicatorServiceFactory : ICommunicatorServiceFactory +internal class FluxServiceFactory : IFluxServiceFactory { - public ICollection Providers { get; private set; } + public ICollection Providers { get; private set; } - public CommunicatorServiceFactory() + public FluxServiceFactory() { - Providers = new HashSet(); + Providers = new HashSet(); } - public ICommunicationContext GetEntityCommunicator( + public IFluxEntityContext GetEntityContext( IServiceProvider services, object? options) where TEntity : class @@ -20,12 +20,12 @@ public ICommunicationContext GetEntityCommunicator( .Where(x => x.ContainsSignature(new (typeof(TEntity), null))) .FirstOrDefault(); - if (provider is null) throw new Exception("Communicator Provider not found."); + if (provider is null) throw new Exception("Flux Service Provider not found."); - return provider.GetEntityCommunicator(services, options); + return provider.GetEntityContext(services, options); } - public ICommunicationContext GetEntityCommunicator( + public IFluxEntityContext GetEntityContext( IServiceProvider services, object? options) where TEntity : class @@ -36,8 +36,8 @@ public ICommunicationContext GetEntityCommunicator .Where(x => x.ContainsSignature(new(typeof(TEntity), typeof(TKey)))) .FirstOrDefault(); - if (provider is null) throw new Exception("Communicator Provider not found."); + if (provider is null) throw new Exception("Flux Service Provider not found."); - return provider.GetEntityCommunicator(services, options); + return provider.GetEntityContext(services, options); } } \ No newline at end of file diff --git a/src/BitzArt.Flux/Models/FluxServicePreBuilder.cs b/src/BitzArt.Flux/Models/FluxServicePreBuilder.cs new file mode 100644 index 0000000..2671f35 --- /dev/null +++ b/src/BitzArt.Flux/Models/FluxServicePreBuilder.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace BitzArt.Flux; + +internal class FluxServicePreBuilder : IFluxServicePreBuilder +{ + public string? Name { get; set; } + public IServiceCollection Services { get; init; } + public IFluxServiceFactory Factory { get; init; } + + public FluxServicePreBuilder(IServiceCollection services, IFluxServiceFactory factory, string? name) + { + Services = services; + Factory = factory; + Name = name; + } +} diff --git a/src/Flex.Net.REST/Extensions/AddEntityExtension.cs b/src/Flex.Net.REST/Extensions/AddEntityExtension.cs deleted file mode 100644 index 1106c1f..0000000 --- a/src/Flex.Net.REST/Extensions/AddEntityExtension.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -public static class AddEntityExtension -{ - public static ICommunicatorRestEntityBuilder AddEntity(this ICommunicatorRestServiceBuilder serviceBuilder, string? endpoint = null) - where TEntity : class - { - var builder = new CommunicatorRestEntityBuilder(serviceBuilder); - - var services = builder.Services; - var provider = builder.Provider; - - provider.AddSignature(new(typeof(TEntity))); - - services.AddScoped(x => - { - var factory = x.GetRequiredService(); - return factory.GetEntityCommunicator(x, builder.EntityOptions); - }); - - if (endpoint is not null) return builder.WithEndpoint(endpoint); - - return builder; - } - - public static ICommunicatorRestEntityBuilder AddEntity(this ICommunicatorRestServiceBuilder serviceBuilder, string? endpoint = null) - where TEntity : class - { - var builder = new CommunicatorRestEntityBuilder(serviceBuilder); - - var services = serviceBuilder.Services; - var provider = serviceBuilder.Provider; - - provider.AddSignature(new(typeof(TEntity), typeof(TKey))); - - services.AddScoped(x => - { - var factory = x.GetRequiredService(); - return factory.GetEntityCommunicator(x, builder.EntityOptions); - }); - - services.AddScoped>(x => - { - var factory = x.GetRequiredService(); - return factory.GetEntityCommunicator(x, builder.EntityOptions); - }); - - if (endpoint is not null) return builder.WithEndpoint(endpoint); - - return builder; - } -} diff --git a/src/Flex.Net.REST/Extensions/ICommunicatorRestServiceBuilderExtensions.cs b/src/Flex.Net.REST/Extensions/ICommunicatorRestServiceBuilderExtensions.cs deleted file mode 100644 index 3090959..0000000 --- a/src/Flex.Net.REST/Extensions/ICommunicatorRestServiceBuilderExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.Json; - -namespace Flex; - -public static class ICommunicatorRestServiceBuilderExtensions -{ - public static ICommunicatorRestServiceBuilder ConfigureJson(this ICommunicatorRestServiceBuilder builder, Action configure) - { - configure(builder.ServiceOptions.SerializerOptions); - - return builder; - } - - public static ICommunicatorRestServiceBuilder ConfigureHttpClient(this ICommunicatorRestServiceBuilder builder, Action configure) - { - builder.HttpClientConfiguration = configure; - - return builder; - } -} diff --git a/src/Flex.Net.REST/Extensions/WithEndpointExtension.cs b/src/Flex.Net.REST/Extensions/WithEndpointExtension.cs deleted file mode 100644 index fbba44a..0000000 --- a/src/Flex.Net.REST/Extensions/WithEndpointExtension.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Flex; - -public static class WithEndpointExtension -{ - public static ICommunicatorRestEntityBuilder WithEndpoint(this ICommunicatorRestEntityBuilder builder, string endpoint) - where TEntity : class - { - builder.EntityOptions.Endpoint = endpoint; - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithEndpoint(this ICommunicatorRestEntityBuilder builder, string endpoint) - where TEntity : class - { - builder.EntityOptions.Endpoint = endpoint; - - return builder; - } -} diff --git a/src/Flex.Net.REST/Extensions/WithIdEndpointExtension.cs b/src/Flex.Net.REST/Extensions/WithIdEndpointExtension.cs deleted file mode 100644 index f687104..0000000 --- a/src/Flex.Net.REST/Extensions/WithIdEndpointExtension.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace Flex; - -public static class WithIdEndpointExtension -{ - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, string endpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = (key, parameters) => endpoint; - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, string endpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = (key, parameters) => endpoint; - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(); - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(); - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(key); - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = (key, parameters) => getEndpoint(key); - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = getEndpoint; - - return builder; - } - - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) - where TEntity : class - { - builder.EntityOptions.GetIdEndpointAction = getEndpoint; - - return builder; - } -} diff --git a/src/Flex.Net.REST/Interfaces/ICommunicatorRestEntityBuilder.cs b/src/Flex.Net.REST/Interfaces/ICommunicatorRestEntityBuilder.cs deleted file mode 100644 index 36e840b..0000000 --- a/src/Flex.Net.REST/Interfaces/ICommunicatorRestEntityBuilder.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Flex; - -public interface ICommunicatorRestEntityBuilder : ICommunicatorEntityBuilder, ICommunicatorRestServiceBuilder - where TEntity : class -{ - public CommunicatorRestEntityOptions EntityOptions { get; } -} - -public interface ICommunicatorRestEntityBuilder : ICommunicatorRestEntityBuilder - where TEntity : class -{ - public new CommunicatorRestEntityOptions EntityOptions { get; } -} diff --git a/src/Flex.Net.REST/Interfaces/ICommunicatorRestServiceBuilder.cs b/src/Flex.Net.REST/Interfaces/ICommunicatorRestServiceBuilder.cs deleted file mode 100644 index 8b7735c..0000000 --- a/src/Flex.Net.REST/Interfaces/ICommunicatorRestServiceBuilder.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Flex; - -public interface ICommunicatorRestServiceBuilder : ICommunicatorServiceBuilder -{ - public CommunicatorRestServiceOptions ServiceOptions { get; } - internal Action? HttpClientConfiguration { get; set; } -} diff --git a/src/Flex.Net.REST/Models/CommunicatorRestEntityBuilder.cs b/src/Flex.Net.REST/Models/CommunicatorRestEntityBuilder.cs deleted file mode 100644 index 1215c4f..0000000 --- a/src/Flex.Net.REST/Models/CommunicatorRestEntityBuilder.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -internal class CommunicatorRestEntityBuilder : ICommunicatorRestEntityBuilder - where TEntity : class -{ - public ICommunicatorRestServiceBuilder ServiceBuilder { get; init; } - - public IServiceCollection Services => ServiceBuilder.Services; - public ICommunicatorServiceProvider Provider => ServiceBuilder.Provider; - public ICommunicatorServiceFactory Factory => ServiceBuilder.Factory; - public CommunicatorRestServiceOptions ServiceOptions => ServiceBuilder.ServiceOptions; - - public Action? HttpClientConfiguration - { - get => ServiceBuilder.HttpClientConfiguration; - set => ServiceBuilder.HttpClientConfiguration = value; - } - - public CommunicatorRestEntityOptions EntityOptions { get; set; } - - public CommunicatorRestEntityBuilder(ICommunicatorRestServiceBuilder serviceBuilder) - { - ServiceBuilder = serviceBuilder; - EntityOptions = new(); - } -} - -internal class CommunicatorRestEntityBuilder : CommunicatorRestEntityBuilder, ICommunicatorRestEntityBuilder - where TEntity : class -{ - public new CommunicatorRestEntityOptions EntityOptions { get; set; } - - public CommunicatorRestEntityBuilder(ICommunicatorRestServiceBuilder serviceBuilder) : base(serviceBuilder) - { - EntityOptions = new(); - } -} diff --git a/src/Flex.Net.REST/Models/CommunicatorRestServiceProvider.cs b/src/Flex.Net.REST/Models/CommunicatorRestServiceProvider.cs deleted file mode 100644 index 5e08acb..0000000 --- a/src/Flex.Net.REST/Models/CommunicatorRestServiceProvider.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace Flex; - -internal class CommunicatorRestServiceProvider : ICommunicatorServiceProvider -{ - private readonly ICollection _entitySignatures; - private readonly CommunicatorRestServiceOptions _serviceOptions; - - public string ServiceName { get; private set; } - - public CommunicatorRestServiceProvider(CommunicatorRestServiceOptions options, string serviceName) - { - _serviceOptions = options; - ServiceName = serviceName; - _entitySignatures = new HashSet(); - } - - public void AddSignature(CommunicatorEntitySignature entitySignature) - { - _entitySignatures.Add(entitySignature); - } - - public bool ContainsSignature(CommunicatorEntitySignature entitySignature) - { - return _entitySignatures.Contains(entitySignature); - } - - public ICommunicationContext GetEntityCommunicator(IServiceProvider services, object? options) - where TEntity : class - { - if (options is not CommunicatorRestEntityOptions optionsCasted) throw new Exception("Wrong options type"); - - var httpClientFactory = services.GetRequiredService(); - var httpClient = httpClientFactory.CreateClient(ServiceName); - var loggerFactory = services.GetRequiredService(); - var logger = loggerFactory.CreateLogger("Communicator"); - - return new CommunicatorRestEntityContext(httpClient, _serviceOptions, logger, optionsCasted); - } - - public ICommunicationContext GetEntityCommunicator(IServiceProvider services, object? options) - where TEntity : class - { - if (options is not CommunicatorRestEntityOptions optionsCasted) throw new Exception("Wrong options type"); - - var httpClientFactory = services.GetRequiredService(); - var httpClient = httpClientFactory.CreateClient(ServiceName); - var loggerFactory = services.GetRequiredService(); - var logger = loggerFactory.CreateLogger("Communicator"); - - return new CommunicatorRestEntityContext(httpClient, _serviceOptions, logger, optionsCasted); - } -} \ No newline at end of file diff --git a/src/Flex.Net/Extensions/AddCommunicatorExtension.cs b/src/Flex.Net/Extensions/AddCommunicatorExtension.cs deleted file mode 100644 index b4c1a3b..0000000 --- a/src/Flex.Net/Extensions/AddCommunicatorExtension.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -public static class AddCommunicatorExtension -{ - public static IServiceCollection AddCommunicator(this IServiceCollection services, Action configure) - { - var alreadyRegistered = services - .Any(x => x.Lifetime == ServiceLifetime.Singleton && - x.ServiceType == typeof(ICommunicatorServiceFactory)); - - if (alreadyRegistered) throw new CommunicatorAlreadyRegisteredException(); - - var builder = new CommunicatorBuilder(services); - configure(builder); - - var factory = builder.Factory; - services.AddSingleton(factory); - - services.AddScoped(x => new CommunicationContext(x)); - - return services; - } - - private class CommunicatorAlreadyRegisteredException : Exception - { - private const string Msg = "Communicator is already registered for this IServiceCollection"; - public CommunicatorAlreadyRegisteredException() : base(Msg) { } - } -} diff --git a/src/Flex.Net/Extensions/AddServiceExtension.cs b/src/Flex.Net/Extensions/AddServiceExtension.cs deleted file mode 100644 index f4ddc6b..0000000 --- a/src/Flex.Net/Extensions/AddServiceExtension.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Flex; - -public static class AddServiceExtension -{ - public static ICommunicatorServicePreBuilder AddService(this ICommunicatorBuilder builder, string name) - { - var service = new CommunicatorServicePreBuilder(builder.Services, builder.Factory, name); - - return service; - } -} diff --git a/src/Flex.Net/Interfaces/ICommunicatorBuilder.cs b/src/Flex.Net/Interfaces/ICommunicatorBuilder.cs deleted file mode 100644 index 9c73698..0000000 --- a/src/Flex.Net/Interfaces/ICommunicatorBuilder.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -public interface ICommunicatorBuilder -{ - internal ICommunicatorServiceFactory Factory { get; } - internal IServiceCollection Services { get; } -} diff --git a/src/Flex.Net/Interfaces/ICommunicatorEntityBuilder.cs b/src/Flex.Net/Interfaces/ICommunicatorEntityBuilder.cs deleted file mode 100644 index b695b94..0000000 --- a/src/Flex.Net/Interfaces/ICommunicatorEntityBuilder.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Flex; - -public interface ICommunicatorEntityBuilder : ICommunicatorServiceBuilder -{ -} diff --git a/src/Flex.Net/Interfaces/ICommunicatorServiceBuilder.cs b/src/Flex.Net/Interfaces/ICommunicatorServiceBuilder.cs deleted file mode 100644 index d259939..0000000 --- a/src/Flex.Net/Interfaces/ICommunicatorServiceBuilder.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -public interface ICommunicatorServiceBuilder -{ - internal IServiceCollection Services { get; } - internal ICommunicatorServiceProvider Provider { get; } - internal ICommunicatorServiceFactory Factory { get; } -} \ No newline at end of file diff --git a/src/Flex.Net/Interfaces/ICommunicatorServiceFactory.cs b/src/Flex.Net/Interfaces/ICommunicatorServiceFactory.cs deleted file mode 100644 index 8afda96..0000000 --- a/src/Flex.Net/Interfaces/ICommunicatorServiceFactory.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Flex; - -internal interface ICommunicatorServiceFactory -{ - internal ICollection Providers { get; } - - internal ICommunicationContext GetEntityCommunicator(IServiceProvider services, object? options) - where TEntity : class; - - internal ICommunicationContext GetEntityCommunicator(IServiceProvider services, object? options) - where TEntity : class; -} \ No newline at end of file diff --git a/src/Flex.Net/Interfaces/ICommunicatorServiceProvider.cs b/src/Flex.Net/Interfaces/ICommunicatorServiceProvider.cs deleted file mode 100644 index 6aa4dad..0000000 --- a/src/Flex.Net/Interfaces/ICommunicatorServiceProvider.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Flex; - -internal interface ICommunicatorServiceProvider -{ - internal string ServiceName { get; } - - internal void AddSignature(CommunicatorEntitySignature entitySignature); - internal bool ContainsSignature(CommunicatorEntitySignature entitySignature); - - ICommunicationContext GetEntityCommunicator(IServiceProvider services, object? options) - where TEntity : class; - - ICommunicationContext GetEntityCommunicator(IServiceProvider services, object? options) - where TEntity : class; -} \ No newline at end of file diff --git a/src/Flex.Net/Models/CommunicationContext.cs b/src/Flex.Net/Models/CommunicationContext.cs deleted file mode 100644 index 4405fdd..0000000 --- a/src/Flex.Net/Models/CommunicationContext.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -internal class CommunicationContext : ICommunicationContext -{ - private readonly IServiceProvider _serviceProvider; - - public CommunicationContext(IServiceProvider serviceProvider) - { - _serviceProvider = serviceProvider; - } - - public ICommunicationContext Entity() - where TEntity : class - => _serviceProvider.GetRequiredService>(); - - public ICommunicationContext Entity() - where TEntity : class - => _serviceProvider.GetRequiredService>(); -} diff --git a/src/Flex.Net/Models/CommunicatorBuilder.cs b/src/Flex.Net/Models/CommunicatorBuilder.cs deleted file mode 100644 index e9bb02b..0000000 --- a/src/Flex.Net/Models/CommunicatorBuilder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -internal class CommunicatorBuilder : ICommunicatorBuilder -{ - public IServiceCollection Services { get; private set; } - public ICommunicatorServiceFactory Factory { get; init; } - - public CommunicatorBuilder(IServiceCollection services) - { - Services = services; - Factory = new CommunicatorServiceFactory(); - } -} diff --git a/src/Flex.Net/Models/CommunicatorEntitySignature.cs b/src/Flex.Net/Models/CommunicatorEntitySignature.cs deleted file mode 100644 index 46bc0bd..0000000 --- a/src/Flex.Net/Models/CommunicatorEntitySignature.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace Flex; - -internal record CommunicatorEntitySignature(Type EntityType, Type? KeyType = null); \ No newline at end of file diff --git a/src/Flex.Net/Models/CommunicatorServicePreBuilder.cs b/src/Flex.Net/Models/CommunicatorServicePreBuilder.cs deleted file mode 100644 index 0d400e5..0000000 --- a/src/Flex.Net/Models/CommunicatorServicePreBuilder.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Flex; - -internal class CommunicatorServicePreBuilder : ICommunicatorServicePreBuilder -{ - public string? Name { get; set; } - public IServiceCollection Services { get; init; } - public ICommunicatorServiceFactory Factory { get; init; } - - public CommunicatorServicePreBuilder(IServiceCollection services, ICommunicatorServiceFactory factory, string? name) - { - Services = services; - Factory = factory; - Name = name; - } -} diff --git a/tests/Flex.Net.REST.Tests/Flex.Net.REST.Tests.csproj b/tests/BitzArt.Flux.REST.Tests/BitzArt.Flux.REST.Tests.csproj similarity index 88% rename from tests/Flex.Net.REST.Tests/Flex.Net.REST.Tests.csproj rename to tests/BitzArt.Flux.REST.Tests/BitzArt.Flux.REST.Tests.csproj index e81359c..5bc766d 100644 --- a/tests/Flex.Net.REST.Tests/Flex.Net.REST.Tests.csproj +++ b/tests/BitzArt.Flux.REST.Tests/BitzArt.Flux.REST.Tests.csproj @@ -4,7 +4,7 @@ net7.0 enable enable - Flex + BitzArt.Flux false @@ -25,7 +25,7 @@ - + diff --git a/tests/Flex.Net.REST.Tests/MockedRestServiceTests.cs b/tests/BitzArt.Flux.REST.Tests/MockedRestServiceTests.cs similarity index 96% rename from tests/Flex.Net.REST.Tests/MockedRestServiceTests.cs rename to tests/BitzArt.Flux.REST.Tests/MockedRestServiceTests.cs index 2269c14..b33888c 100644 --- a/tests/Flex.Net.REST.Tests/MockedRestServiceTests.cs +++ b/tests/BitzArt.Flux.REST.Tests/MockedRestServiceTests.cs @@ -2,7 +2,7 @@ using System.Net.Http.Json; using System.Net; -namespace Flex; +namespace BitzArt.Flux; public class MockedRestServiceTests { @@ -109,7 +109,7 @@ public async Task GetAsync_CustomIdEndpointLogic_ReturnsEntity(string baseUrl) TestEntity.GetAll(entityCount).FirstOrDefault(x => x.Id == 1))); }); - ((CommunicatorRestEntityContext)entityContext) + ((FluxRestEntityContext)entityContext) .EntityOptions.GetIdEndpointAction = (key, parameters) => "entity/specific"; var result = await entityContext.GetAsync(1); @@ -130,7 +130,7 @@ public async Task GetAsyncWithParameters_MockedHttpClient_Returns() var defaultName = defaultEntity.Name; var changedEntity = new TestEntity() { Id = id, Name = changedName }; - var entityContext = (CommunicatorRestEntityContext) + var entityContext = (FluxRestEntityContext) TestEntityContext.GetTestEntityContext(baseUrl, x => { x.When($"{baseUrl.TrimEnd('/')}/entity/{id}?changeName=False") @@ -159,7 +159,7 @@ public async Task GetPageAsyncWithParameters_MockedHttpClient_Returns() { var baseUrl = "https://mocked.service"; - var entityContext = (CommunicatorRestEntityContext) + var entityContext = (FluxRestEntityContext) TestEntityContext.GetTestEntityContext(baseUrl, x => { x.When($"{baseUrl.TrimEnd('/')}/test-1?offset=0&limit=10") diff --git a/tests/Flex.Net.REST.Tests/MockedService/MockedService.cs b/tests/BitzArt.Flux.REST.Tests/MockedService/MockedService.cs similarity index 95% rename from tests/Flex.Net.REST.Tests/MockedService/MockedService.cs rename to tests/BitzArt.Flux.REST.Tests/MockedService/MockedService.cs index 12ee7ca..33ff84f 100644 --- a/tests/Flex.Net.REST.Tests/MockedService/MockedService.cs +++ b/tests/BitzArt.Flux.REST.Tests/MockedService/MockedService.cs @@ -1,6 +1,6 @@ using RichardSzalay.MockHttp; -namespace Flex; +namespace BitzArt.Flux; internal class MockedService { diff --git a/tests/Flex.Net.REST.Tests/MockedService/TestEntity.cs b/tests/BitzArt.Flux.REST.Tests/MockedService/TestEntity.cs similarity index 96% rename from tests/Flex.Net.REST.Tests/MockedService/TestEntity.cs rename to tests/BitzArt.Flux.REST.Tests/MockedService/TestEntity.cs index bec85d4..a6a6ee3 100644 --- a/tests/Flex.Net.REST.Tests/MockedService/TestEntity.cs +++ b/tests/BitzArt.Flux.REST.Tests/MockedService/TestEntity.cs @@ -1,7 +1,7 @@ using BitzArt.Pagination; using System.Text.Json.Serialization; -namespace Flex; +namespace BitzArt.Flux; internal class TestEntity { diff --git a/tests/BitzArt.Flux.REST.Tests/MockedService/TestEntityContext.cs b/tests/BitzArt.Flux.REST.Tests/MockedService/TestEntityContext.cs new file mode 100644 index 0000000..0558364 --- /dev/null +++ b/tests/BitzArt.Flux.REST.Tests/MockedService/TestEntityContext.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Logging; +using RichardSzalay.MockHttp; + +namespace BitzArt.Flux; + +internal static class TestEntityContext +{ + public static IFluxEntityContext GetTestEntityContext(string baseUrl, Action? configureMockWebApi = null) + { + var mockedService = MockedService.GetService(configureMockWebApi); + + var entityContext = new FluxRestEntityContext + (mockedService.GetHttpClient(), + new FluxRestServiceOptions(baseUrl), + LoggerFactory.Create(x => { }).CreateLogger("Flux"), + new FluxRestEntityOptions + { + Endpoint = "entity" + }); + + return entityContext; + } +} diff --git a/tests/Flex.Net.REST.Tests/ServiceRegistrationTests.cs b/tests/BitzArt.Flux.REST.Tests/ServiceRegistrationTests.cs similarity index 62% rename from tests/Flex.Net.REST.Tests/ServiceRegistrationTests.cs rename to tests/BitzArt.Flux.REST.Tests/ServiceRegistrationTests.cs index 32e2a39..559510f 100644 --- a/tests/Flex.Net.REST.Tests/ServiceRegistrationTests.cs +++ b/tests/BitzArt.Flux.REST.Tests/ServiceRegistrationTests.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using System.Text.Json.Serialization; -namespace Flex; +namespace BitzArt.Flux; file class TestEntity { @@ -11,22 +11,22 @@ file class TestEntity public class ServiceRegistrationTests { [Fact] - public void UsingRest_WithEntity_AddsFactoryAndEntityCommunicator() + public void UsingRest_WithEntity_AddsFactoryAndEntityContext() { var services = new ServiceCollection(); var serviceName = "SomeExternalService"; - services.AddCommunicator(communicator => + services.AddFlux(flux => { - communicator.AddService(serviceName) + flux.AddService(serviceName) .UsingRest("http://localhost") .AddEntity("test"); }); var serviceProvider = services.BuildServiceProvider(); - var factory = serviceProvider.GetRequiredService(); + var factory = serviceProvider.GetRequiredService(); Assert.NotNull(factory); Assert.True(factory.Providers.Count > 0); @@ -35,8 +35,8 @@ public void UsingRest_WithEntity_AddsFactoryAndEntityCommunicator() Assert.Equal(serviceName, provider.ServiceName); - var entityCommunicator = serviceProvider.GetRequiredService>(); - Assert.NotNull(entityCommunicator); + var entityContext = serviceProvider.GetRequiredService>(); + Assert.NotNull(entityContext); } [Fact] @@ -46,9 +46,9 @@ public void UsingRest_ConfigureHttpClient_ConfiguresHttpClient() var testHeader = new KeyValuePair("TestHeader", "TestValue"); - services.AddCommunicator(communicator => + services.AddFlux(flux => { - communicator.AddService("test") + flux.AddService("test") .UsingRest("http://localhost") .ConfigureHttpClient(client => { @@ -58,12 +58,12 @@ public void UsingRest_ConfigureHttpClient_ConfiguresHttpClient() }); var serviceProvider = services.BuildServiceProvider(); - var entityCommunicator = serviceProvider.GetRequiredService>(); - Assert.NotNull(entityCommunicator); + var entityContext = serviceProvider.GetRequiredService>(); + Assert.NotNull(entityContext); - var communicatorCasted = (CommunicatorRestEntityContext)entityCommunicator; + var entityContextCasted = (FluxRestEntityContext)entityContext; - Assert.Contains(communicatorCasted.HttpClient.DefaultRequestHeaders, + Assert.Contains(entityContextCasted.HttpClient.DefaultRequestHeaders, x => x.Key == testHeader.Key && x.Value.Single() == testHeader.Value); } @@ -74,9 +74,9 @@ public void UsingRest_WithJsonOptions_ConfiguresJson() bool configUsed = false; - services.AddCommunicator(communicator => + services.AddFlux(flux => { - communicator.AddService("test") + flux.AddService("test") .UsingRest("http://localhost") .ConfigureJson(x => { @@ -91,11 +91,11 @@ public void UsingRest_WithJsonOptions_ConfiguresJson() Assert.True(configUsed); var serviceProvider = services.BuildServiceProvider(); - var entityCommunicator = serviceProvider.GetRequiredService>(); - Assert.NotNull(entityCommunicator); + var entityContext = serviceProvider.GetRequiredService>(); + Assert.NotNull(entityContext); - var communicatorCasted = (CommunicatorRestEntityContext)entityCommunicator; - var serializerOptions = communicatorCasted.ServiceOptions.SerializerOptions; + var entityContextCasted = (FluxRestEntityContext)entityContext; + var serializerOptions = entityContextCasted.ServiceOptions.SerializerOptions; Assert.True(serializerOptions.WriteIndented); Assert.Equal(JsonIgnoreCondition.WhenWritingNull, serializerOptions.DefaultIgnoreCondition); diff --git a/tests/Flex.Net.Tests/Flex.Net.Tests.csproj b/tests/BitzArt.Flux.Tests/BitzArt.Flux.Tests.csproj similarity index 89% rename from tests/Flex.Net.Tests/Flex.Net.Tests.csproj rename to tests/BitzArt.Flux.Tests/BitzArt.Flux.Tests.csproj index 9b95481..77d9afd 100644 --- a/tests/Flex.Net.Tests/Flex.Net.Tests.csproj +++ b/tests/BitzArt.Flux.Tests/BitzArt.Flux.Tests.csproj @@ -4,7 +4,7 @@ net7.0 enable enable - Flex + BitzArt.Flux false @@ -24,7 +24,7 @@ - + diff --git a/tests/Flex.Net.Tests/ServiceRegistrationTests.cs b/tests/BitzArt.Flux.Tests/ServiceRegistrationTests.cs similarity index 53% rename from tests/Flex.Net.Tests/ServiceRegistrationTests.cs rename to tests/BitzArt.Flux.Tests/ServiceRegistrationTests.cs index 3473731..e9655a4 100644 --- a/tests/Flex.Net.Tests/ServiceRegistrationTests.cs +++ b/tests/BitzArt.Flux.Tests/ServiceRegistrationTests.cs @@ -1,18 +1,18 @@ using Microsoft.Extensions.DependencyInjection; -namespace Flex; +namespace BitzArt.Flux; public class ServiceRegistrationTests { [Fact] - public void AddCommunicator_WithEmptyConfiguration_AddsEmptyCommunicatorFactory() + public void AddFlux_WithEmptyConfiguration_AddsEmptyFluxServiceFactory() { var services = new ServiceCollection(); - services.AddCommunicator(x => { }); + services.AddFlux(x => { }); var serviceProvider = services.BuildServiceProvider(); - var factory = serviceProvider.GetService(); + var factory = serviceProvider.GetService(); Assert.NotNull(factory); Assert.NotNull(factory.Providers); @@ -20,26 +20,26 @@ public void AddCommunicator_WithEmptyConfiguration_AddsEmptyCommunicatorFactory( } [Fact] - public void AddCommunicator_Twice_ThrowsOnSecondAdd() + public void AddFlux_Twice_ThrowsOnSecondAdd() { var services = new ServiceCollection(); - services.AddCommunicator(x => { }); + services.AddFlux(x => { }); - Assert.ThrowsAny(() => services.AddCommunicator(x => { })); + Assert.ThrowsAny(() => services.AddFlux(x => { })); } [Fact] - public void AddCommunicator_Empty_AddsCommunicationContext() + public void AddFlux_Empty_AddsCommunicationContext() { var services = new ServiceCollection(); - services.AddCommunicator(x => { }); + services.AddFlux(x => { }); var serviceProvider = services.BuildServiceProvider(); - var communicationContext = serviceProvider.GetService(); + var communicationContext = serviceProvider.GetService(); Assert.NotNull(communicationContext); - var communicationContextByDirectType = serviceProvider.GetService(); + var communicationContextByDirectType = serviceProvider.GetService(); Assert.Null(communicationContextByDirectType); } } \ No newline at end of file diff --git a/tests/Flex.Net.REST.Tests/MockedService/TestEntityContext.cs b/tests/Flex.Net.REST.Tests/MockedService/TestEntityContext.cs deleted file mode 100644 index db8706d..0000000 --- a/tests/Flex.Net.REST.Tests/MockedService/TestEntityContext.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.Extensions.Logging; -using RichardSzalay.MockHttp; - -namespace Flex; - -internal static class TestEntityContext -{ - public static ICommunicationContext GetTestEntityContext(string baseUrl, Action? configureMockWebApi = null) - { - var mockedService = MockedService.GetService(configureMockWebApi); - - var entityContext = new CommunicatorRestEntityContext - (mockedService.GetHttpClient(), - new CommunicatorRestServiceOptions(baseUrl), - LoggerFactory.Create(x => { }).CreateLogger("Communicator"), - new CommunicatorRestEntityOptions - { - Endpoint = "entity" - }); - - return entityContext; - } -}