diff --git a/.github/workflows/mediatr-nuget.yml b/.github/workflows/mediatr-nuget.yml new file mode 100644 index 0000000..385fa2e --- /dev/null +++ b/.github/workflows/mediatr-nuget.yml @@ -0,0 +1,18 @@ +name: Mediatr Nuget + +on: + push: + paths: + - 'mediator/dotnet/lib/**' + - '.github/workflows/mediatr-nuget.yml' + workflow_dispatch: + +jobs: + publish: + name: Pack & Publish nuget + runs-on: ubuntu-latest + steps: + - uses: astorDev/versy/calver/nuget@main + with: + project: mediator/dotnet/lib/Backi.Mediatr + nuget-api-key: ${{ secrets.NUGET_API_KEY }} \ No newline at end of file diff --git a/Backi.sln b/Backi.sln new file mode 100644 index 0000000..5b52df7 --- /dev/null +++ b/Backi.sln @@ -0,0 +1,59 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "timers", "timers", "{BBB56B6A-667F-43C0-8AFE-79530301D381}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{ADCEE902-52AF-4E52-9CEA-77450049AA7C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backi.Timers", "timers\dotnet\lib\Backi.Timers.csproj", "{01EED3EB-7E8D-4770-93DD-84669ED75D1D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "playground", "playground", "{D24565DE-D3B8-42F6-AF8B-B9E4FD3B3A41}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backi.Timers.WebApiPlayground", "timers\dotnet\playground\webapi\Backi.Timers.WebApiPlayground.csproj", "{2245AA58-D144-492A-A477-5B9A24B337A0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backi.Timers.Tests", "timers\dotnet\tests\Backi.Timers.Tests.csproj", "{F9FA4AC6-6E34-4D32-8C9D-573B2321BDE7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mediator", "mediator", "{27BF9028-A9AC-4B9E-9A63-5260B70734D0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{7F2FF828-62E7-497D-8D5C-F0F4A1540AD1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backi.Mediatr", "mediator\dotnet\lib\Backi.Mediatr.csproj", "{1AD779EA-2592-48D0-95BB-6E68FDB5276F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {01EED3EB-7E8D-4770-93DD-84669ED75D1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01EED3EB-7E8D-4770-93DD-84669ED75D1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01EED3EB-7E8D-4770-93DD-84669ED75D1D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01EED3EB-7E8D-4770-93DD-84669ED75D1D}.Release|Any CPU.Build.0 = Release|Any CPU + {2245AA58-D144-492A-A477-5B9A24B337A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2245AA58-D144-492A-A477-5B9A24B337A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2245AA58-D144-492A-A477-5B9A24B337A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2245AA58-D144-492A-A477-5B9A24B337A0}.Release|Any CPU.Build.0 = Release|Any CPU + {F9FA4AC6-6E34-4D32-8C9D-573B2321BDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9FA4AC6-6E34-4D32-8C9D-573B2321BDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9FA4AC6-6E34-4D32-8C9D-573B2321BDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9FA4AC6-6E34-4D32-8C9D-573B2321BDE7}.Release|Any CPU.Build.0 = Release|Any CPU + {1AD779EA-2592-48D0-95BB-6E68FDB5276F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1AD779EA-2592-48D0-95BB-6E68FDB5276F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1AD779EA-2592-48D0-95BB-6E68FDB5276F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1AD779EA-2592-48D0-95BB-6E68FDB5276F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {ADCEE902-52AF-4E52-9CEA-77450049AA7C} = {BBB56B6A-667F-43C0-8AFE-79530301D381} + {01EED3EB-7E8D-4770-93DD-84669ED75D1D} = {ADCEE902-52AF-4E52-9CEA-77450049AA7C} + {D24565DE-D3B8-42F6-AF8B-B9E4FD3B3A41} = {ADCEE902-52AF-4E52-9CEA-77450049AA7C} + {2245AA58-D144-492A-A477-5B9A24B337A0} = {D24565DE-D3B8-42F6-AF8B-B9E4FD3B3A41} + {F9FA4AC6-6E34-4D32-8C9D-573B2321BDE7} = {ADCEE902-52AF-4E52-9CEA-77450049AA7C} + {7F2FF828-62E7-497D-8D5C-F0F4A1540AD1} = {27BF9028-A9AC-4B9E-9A63-5260B70734D0} + {1AD779EA-2592-48D0-95BB-6E68FDB5276F} = {7F2FF828-62E7-497D-8D5C-F0F4A1540AD1} + EndGlobalSection +EndGlobal diff --git a/mediator/dotnet/lib/Backi.Mediatr.csproj b/mediator/dotnet/lib/Backi.Mediatr.csproj new file mode 100644 index 0000000..d69c063 --- /dev/null +++ b/mediator/dotnet/lib/Backi.Mediatr.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/mediator/dotnet/lib/ServiceScopeExtensions.cs b/mediator/dotnet/lib/ServiceScopeExtensions.cs new file mode 100644 index 0000000..05f2ca4 --- /dev/null +++ b/mediator/dotnet/lib/ServiceScopeExtensions.cs @@ -0,0 +1,19 @@ +using MediatR; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Backi; + +public static class ServiceScopeExtensions +{ + public static async Task SendMediatorRequest(this IServiceScopeFactory serviceScopeFactory, ILogger? logger = null, CancellationToken? cancellationToken = null) + where TRequest : IRequest + { + logger?.LogDebug("Sending {requestType} to mediator in a new scope", typeof(TRequest)); + using var scope = serviceScopeFactory.CreateScope(); + var mediator = scope.ServiceProvider.GetRequiredService(); + var request = (TRequest)Activator.CreateInstance(typeof(TRequest))!; + await mediator.Send(request, cancellationToken ?? CancellationToken.None); + logger?.LogInformation("{requestType} processed by mediator", typeof(TRequest)); + } +}