Skip to content
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

Flux v1.0 #44

Draft
wants to merge 69 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
2580d9a
Add new interfaces
ligowsky Jan 6, 2025
b552e5a
Implement REST GetAllAsync
ligowsky Jan 6, 2025
89ed7c5
Implement REST GetPageAsync
ligowsky Jan 6, 2025
71b6c7d
Implement REST GetAsync
ligowsky Jan 6, 2025
65d197e
Implement REST AddAsync
ligowsky Jan 6, 2025
f4e5394
Implement REST UpdateAsync
ligowsky Jan 6, 2025
441703d
Remove old SetContext
ligowsky Jan 6, 2025
852ab8f
Use IFluxRequestParameters
ligowsky Jan 12, 2025
4c3199f
Update WithEndpointExtension
ligowsky Jan 12, 2025
42e29a0
Update GetRequestParametersFunc
ligowsky Jan 12, 2025
61f6e24
Add FluxRestRequestParameters
ligowsky Jan 12, 2025
c1365d0
Update WithEndpoint
ligowsky Jan 13, 2025
8dec77b
Format FluxRestRequestParameters
ligowsky Jan 13, 2025
df1aae1
Update WithPageEndpoint
ligowsky Jan 13, 2025
fc9899e
Update WithIdEndpoint
ligowsky Jan 13, 2025
00df2e5
Add summary
ligowsky Jan 13, 2025
0451f96
Cleanup
ligowsky Jan 14, 2025
ae0e831
Handle REST parameters
ligowsky Jan 16, 2025
283e3c0
Rename parameters
ligowsky Jan 16, 2025
e671c17
Cleanup
ligowsky Jan 16, 2025
e5d75d5
Add extension methods
ligowsky Jan 16, 2025
8987c99
Rename func
ligowsky Jan 16, 2025
260e930
WIP: Refactor
ligowsky Jan 16, 2025
a8f594c
Cleanup
ligowsky Jan 16, 2025
3679e93
Refactor extensions and builders
ligowsky Jan 20, 2025
bde3838
Reset FluxRestSetContext
ligowsky Jan 20, 2025
e128ac3
Reset RequestParameterParsingUtility
ligowsky Jan 20, 2025
d9e2ad7
Remove endpoint builders
ligowsky Jan 20, 2025
f6b7186
Rename
ligowsky Jan 20, 2025
7d2c2b6
Add EndpointOptionsCollection
ligowsky Jan 21, 2025
7e9c548
WIP: adding endpoint options
ligowsky Jan 22, 2025
0773983
Add IFluxRestSetPageEndpointOptions
ligowsky Jan 22, 2025
ea76215
Minor fixes
ligowsky Jan 22, 2025
dbe3279
WIP: FluxRestSetEndpointOptionsCollection
ligowsky Jan 26, 2025
bc1d942
Refactor RequestParameterParsingUtility
ligowsky Jan 28, 2025
bbe7257
WIP: refactor interfaces
ligowsky Jan 30, 2025
91b3aad
Update set context methods
ligowsky Feb 2, 2025
3bbb41e
WIP: refactor interfaces
ligowsky Feb 3, 2025
cb55bc5
Fix constraints
ligowsky Feb 4, 2025
6209d94
Update FluxRestSetContext
ligowsky Feb 5, 2025
90d06cc
Split FluxSetContext
ligowsky Feb 5, 2025
f7d45fc
WIP: refactor
ligowsky Feb 10, 2025
bd9eaac
WIP: parse path
ligowsky Feb 10, 2025
aeef005
Cleanup
ligowsky Feb 10, 2025
ff3efe2
Refactor default endpoint options
ligowsky Feb 10, 2025
2e476ec
Update options
ligowsky Feb 11, 2025
b745f02
WIP: tests
ligowsky Feb 11, 2025
0979a0a
WIP: refactor
ligowsky Feb 11, 2025
2706458
Cleanup
YuriyDurov Feb 12, 2025
4514b82
ServiceRegistrationTests Cleanup
YuriyDurov Feb 12, 2025
e80933e
Delegating Handler updates
YuriyDurov Feb 17, 2025
a8a279d
Update test names
YuriyDurov Feb 17, 2025
20e4461
Map IFluxSetContext xml documentation
YuriyDurov Feb 17, 2025
11c35b8
Refactor set operations interfaces
YuriyDurov Feb 17, 2025
0fb2867
Group set operations under a parent interface
YuriyDurov Feb 17, 2025
835be22
Revert to using a partial interface
YuriyDurov Feb 17, 2025
780c895
Move factory interfaces and update their comments
YuriyDurov Feb 17, 2025
5f8569e
Close base package internals even from implementation packages
YuriyDurov Feb 17, 2025
0cf722f
Segregate interfaces for set operations
YuriyDurov Feb 26, 2025
c74281d
Cleanup
YuriyDurov Feb 26, 2025
22304ff
Cleanup
YuriyDurov Feb 26, 2025
225f843
Split operation interface files by generic definitions
YuriyDurov Mar 4, 2025
c35b4ef
Simplify IFluxSetParameterlessOperations -> IFluxSetOperations
YuriyDurov Mar 4, 2025
f482937
Extra explanation
YuriyDurov Mar 4, 2025
0f144e7
Extract Flux.REST.Builder as standalone package
YuriyDurov Mar 4, 2025
60885d8
WIP
YuriyDurov Mar 4, 2025
e7c75c7
WIP
YuriyDurov Mar 4, 2025
c980601
OperationParameters
YuriyDurov Mar 6, 2025
531f175
User might call this, so not unreachable
YuriyDurov Mar 6, 2025
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
5 changes: 4 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@ dotnet_diagnostic.IDE0130.severity = none
dotnet_diagnostic.BL0005.severity = none

# BL0007: Component parameters should be auto properties
dotnet_diagnostic.BL0007.severity = none
dotnet_diagnostic.BL0007.severity = none

# IDE0290: Use primary constructor
dotnet_diagnostic.IDE0290.severity = none
6 changes: 5 additions & 1 deletion .github/workflows/Publish Flux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,12 @@ jobs:
- name: Push
run: |
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}

dotnet nuget push BitzArt.Flux.REST.Context.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY}
dotnet nuget push BitzArt.Flux.REST.Builder.${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}

dotnet nuget push BitzArt.Flux.Json.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY}

dotnet nuget push BitzArt.Flux.MudBlazor.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key ${NUGET_APIKEY}

48 changes: 48 additions & 0 deletions BitzArt.Flux.sln
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,45 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sln", "sln", "{9483F0E9-547
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{A2CF3320-C42E-44F5-B88A-2CC29EFB9460}"
ProjectSection(SolutionItems) = preProject
docs\book.toml = docs\book.toml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3122077F-A7F9-4212-97D9-868217EF9D1C}"
ProjectSection(SolutionItems) = preProject
docs\src\01.introduction.md = docs\src\01.introduction.md
docs\src\02.configure.md = docs\src\02.configure.md
docs\src\03.use.md = docs\src\03.use.md
docs\src\04.implementations.md = docs\src\04.implementations.md
docs\src\README.md = docs\src\README.md
docs\src\SUMMARY.md = docs\src\SUMMARY.md
docs\src\_config.yml = docs\src\_config.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "json", "json", "{7B8D8836-126D-4F12-AF45-7D5414F58850}"
ProjectSection(SolutionItems) = preProject
docs\src\json\01.introduction.md = docs\src\json\01.introduction.md
docs\src\json\README.md = docs\src\json\README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rest", "rest", "{4E6BDC28-D997-43B7-B0DE-C676636669FE}"
ProjectSection(SolutionItems) = preProject
docs\src\rest\01.introduction.md = docs\src\rest\01.introduction.md
docs\src\rest\02.endpoints.md = docs\src\rest\02.endpoints.md
docs\src\rest\03.variables.md = docs\src\rest\03.variables.md
docs\src\rest\04.pagination.md = docs\src\rest\04.pagination.md
docs\src\rest\05.advanced.md = docs\src\rest\05.advanced.md
docs\src\rest\README.md = docs\src\rest\README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "theme", "theme", "{D6F7155D-4BB7-4251-8C92-795F8A9F332D}"
ProjectSection(SolutionItems) = preProject
docs\theme\favicon.png = docs\theme\favicon.png
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BitzArt.Flux.REST.Builder", "src\REST\BitzArt.Flux.REST.Builder\BitzArt.Flux.REST.Builder.csproj", "{F040E34E-D8DD-421A-86A8-CE8D37007655}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -117,6 +156,10 @@ Global
{CBB67562-DEED-4E07-814A-EF6FCB3D5533}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBB67562-DEED-4E07-814A-EF6FCB3D5533}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBB67562-DEED-4E07-814A-EF6FCB3D5533}.Release|Any CPU.Build.0 = Release|Any CPU
{F040E34E-D8DD-421A-86A8-CE8D37007655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F040E34E-D8DD-421A-86A8-CE8D37007655}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F040E34E-D8DD-421A-86A8-CE8D37007655}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F040E34E-D8DD-421A-86A8-CE8D37007655}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -142,6 +185,11 @@ Global
{49160F37-A42B-4E08-A4F6-8C7D6F3AEE98} = {A3976FBB-F37A-4468-955D-8B2FCC79ACD0}
{F8192256-A717-4EA4-96CE-43196803AE03} = {A3976FBB-F37A-4468-955D-8B2FCC79ACD0}
{CBB67562-DEED-4E07-814A-EF6FCB3D5533} = {DF7F7802-31AB-4CDC-A177-9982951AF2DB}
{3122077F-A7F9-4212-97D9-868217EF9D1C} = {A2CF3320-C42E-44F5-B88A-2CC29EFB9460}
{7B8D8836-126D-4F12-AF45-7D5414F58850} = {3122077F-A7F9-4212-97D9-868217EF9D1C}
{4E6BDC28-D997-43B7-B0DE-C676636669FE} = {3122077F-A7F9-4212-97D9-868217EF9D1C}
{D6F7155D-4BB7-4251-8C92-795F8A9F332D} = {A2CF3320-C42E-44F5-B88A-2CC29EFB9460}
{F040E34E-D8DD-421A-86A8-CE8D37007655} = {DF7F7802-31AB-4CDC-A177-9982951AF2DB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {251D5A13-6C1B-4B0D-A6F5-3B95FF4C0F54}
Expand Down
1 change: 1 addition & 0 deletions docs/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@
- [Configuring endpoints](rest/02.endpoints.md)
- [Custom Variables](rest/03.variables.md)
- [Pagination](rest/04.pagination.md)
- [Advanced Scenarios](rest/05.advanced.md)
- [Flux.JSON](json/01.introduction.md)
27 changes: 27 additions & 0 deletions docs/src/rest/05.advanced.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## Advanced Scenarios

### Custom HTTP Message Handlers

**Flux.REST** allows configuring custom [http message handlers](https://learn.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers) for your external services. This can be useful for adding custom headers, logging, or any other custom logic.

Example of an http message handler:

```csharp
private class MyHttpHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken);
}
}
```

To use a custom http message handler, add it when configuring your external service:

```csharp
services.AddFlux(flux =>
{
flux.AddService("my-service")
.UsingRest<MyHttpHandler>("http://external.service.address")
});
```
4 changes: 3 additions & 1 deletion docs/src/rest/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@
- [Methods](02.endpoints.md#methods)
3. [Custom Variables](03.variables.md)
- [Custom Page endpoint with parent id example](03.variables.md#custom-page-endpoint-with-parent-id-example)
4. [Pagination](04.pagination.md)
4. [Pagination](04.pagination.md)
5. [Advanced Scenarios](05.advanced.md)
- [Custom HTTP Message Handlers](05.advanced.md#custom-http-message-handlers)
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.*" />
<PackageReference Include="MudBlazor" Version="7.15.0" />
<PackageReference Include="System.Text.Json" Version="9.0.0" />
<PackageReference Include="MudBlazor" Version="8.2.0" />
<PackageReference Include="System.Text.Json" Version="9.0.2" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ public static void AddFlux(this IServiceCollection services, string baseUrl)
services.AddFlux(x =>
{
x.AddService("library-web-api")
.UsingRest(baseUrl.TrimEnd('/') + "/api")
.UsingRest(baseUrl.TrimEnd('/') + "/api")

.AddSet<Author, int>()
.WithEndpoint("authors")

.AddSet<Book, int>()
.WithEndpoint("books")
.WithPageEndpoint("books{query}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BitzArt.Pagination" Version="1.15.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" />
<PackageReference Include="BitzArt.Pagination" Version="1.16.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.2" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public static void MapDataEndpoints(this WebApplication app)

var orderDirection = desc ? OrderDirection.Descending : OrderDirection.Ascending;

q = string.IsNullOrWhiteSpace(order)
q = string.IsNullOrWhiteSpace(order)
? q.OrderBy(x => x.Id, orderDirection)
: q.Order(order, orderDirection);

Expand Down
12 changes: 3 additions & 9 deletions src/BitzArt.Flux/BitzArt.Flux.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,15 @@

<ItemGroup>
<PackageReference Include="BitzArt.LinqExtensions" Version="1.7.0" />
<PackageReference Include="BitzArt.Pagination" Version="1.15.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="9.0.0" />
<PackageReference Include="BitzArt.Pagination" Version="1.16.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.2" />
<PackageReference Include="Microsoft.Extensions.Options" Version="9.0.2" />
</ItemGroup>

<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>BitzArt.Flux.Tests</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>BitzArt.Flux.REST.Tests</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>BitzArt.Flux.Json.Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ internal class FluxServicePreBuilder(IServiceCollection services, IFluxFactory f
: IFluxServicePreBuilder
{
public string? Name { get; set; } = name;
public IServiceCollection Services { get; init; } = services;
public IServiceCollection ServiceCollection { get; init; } = services;
public IFluxFactory Factory { get; init; } = factory;
}
14 changes: 14 additions & 0 deletions src/BitzArt.Flux/Exceptions/FluxException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace BitzArt.Flux;

/// <summary>
/// An <see cref="Exception"/> thrown by the Flux library.
/// </summary>
public class FluxException : Exception
{
/// <summary>
/// Initializes a new instance of the <see cref="FluxException"/> class.
/// </summary>
/// <param name="message">Error message.</param>
/// <param name="innerException">Inner exception.</param>
public FluxException(string message, Exception? innerException = null) : base(message, innerException) { }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace BitzArt.Flux;

/// <summary>
/// An exception thrown when multiple Flux Service Providers are found.
/// </summary>
public class FluxMultipleServiceProviderFoundException : FluxException
{
internal const string DefaultMessage = "Multiple matching Flux Service Providers were found.";

/// <summary>
/// Initializes a new instance of the <see cref="FluxMultipleServiceProviderFoundException"/> class.
/// </summary>
public FluxMultipleServiceProviderFoundException(string message = DefaultMessage, Exception? innerException = null)
: base(message, innerException) { }
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
/// <summary>
/// An exception thrown when a Flux Service Provider is not found.
/// </summary>
public class FluxServiceProviderNotFoundException : Exception
public class FluxServiceProviderNotFoundException : FluxException
{
internal const string DefaultMessage = "Requested Flux Service Provider was not found.";

/// <summary>
/// Initializes a new instance of the <see cref="FluxServiceProviderNotFoundException"/> class.
/// </summary>
public FluxServiceProviderNotFoundException()
: base("Requested Flux Service Provider was not found.")
{ }
public FluxServiceProviderNotFoundException(string message = DefaultMessage, Exception? innerException = null)
: base(message, innerException) { }
}
28 changes: 28 additions & 0 deletions src/BitzArt.Flux/Exceptions/FluxSetAlreadyRegisteredException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
namespace BitzArt.Flux;

/// <summary>
/// An exception thrown when a Flux Set is already registered,
/// and a new one is being registered with the same name.
/// </summary>
public class FluxSetAlreadyRegisteredException : FluxException
{
internal static string GetDefaultMessage(string name)
=> $"An unnamed Flux Set for a model '{name}' was already registered previously. Consider giving specific names to different sets for this model.";

/// <summary>
/// Initializes a new instance of the <see cref="FluxSetAlreadyRegisteredException"/> class.
/// </summary>
/// <param name="name">Model name.</param>
/// <param name="innerException">Inner exception.</param>
/// <returns>A new instance of the <see cref="FluxSetAlreadyRegisteredException"/> class.</returns>
public static FluxSetAlreadyRegisteredException ByModelName(string name, Exception? innerException = null)
=> new(GetDefaultMessage(name), innerException);

/// <summary>
/// Initializes a new instance of the <see cref="FluxSetAlreadyRegisteredException"/> class.
/// </summary>
/// <param name="message">Error message.</param>
/// <param name="innerException">Inner exception.</param>
public FluxSetAlreadyRegisteredException(string message, Exception? innerException = null)
: base(message, innerException) { }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace BitzArt.Flux;

/// <summary>
/// An exception thrown when a Flux Set Configuration is not found.
/// </summary>
public class FluxSetConfigurationNotFoundException : FluxException
{
internal const string DefaultMessage = "Requested Set Configuration was not found.";
/// <summary>
/// Initializes a new instance of the <see cref="FluxSetConfigurationNotFoundException"/> class.
/// </summary>
public FluxSetConfigurationNotFoundException(string message = DefaultMessage, Exception? innerException = null)
: base(message, innerException) { }
}

This file was deleted.

14 changes: 0 additions & 14 deletions src/BitzArt.Flux/Exceptions/SetAlreadyRegisteredException.cs

This file was deleted.

13 changes: 0 additions & 13 deletions src/BitzArt.Flux/Exceptions/SetConfigurationNotFoundException.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public interface IFluxServiceBuilder
/// <summary>
/// Service collection where Flux Services are registered.
/// </summary>
public IServiceCollection Services { get; }
public IServiceCollection ServiceCollection { get; }

/// <summary>
/// Flux Service Factory instance.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public interface IFluxServicePreBuilder
/// <summary>
/// The service collection where Flux Services are registered.
/// </summary>
public IServiceCollection Services { get; }
public IServiceCollection ServiceCollection { get; }

/// <summary>
/// Flux Factory instance.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace BitzArt.Flux;

/// <summary>
/// Internal Flux factory. Stores factories for configured services.
/// Contains nested factories for configured services.
/// </summary>
public interface IFluxFactory
{
Expand All @@ -25,5 +25,6 @@ public IFluxSetContext<TModel> GetSetContext<TModel>(IServiceProvider services,
/// Resolves a context for a specific Flux Service.
/// </summary>
public IFluxSetContext<TModel, TKey> GetSetContext<TModel, TKey>(IServiceProvider services, string? serviceName = null, string? setName = null)
where TModel : class;
where TModel : class
where TKey : notnull;
}
Loading