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

Dependency Injection tests for various providers #1070

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 7 additions & 0 deletions MediatR.sln
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MediatR.Examples.SimpleInje
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MediatR.Examples.Stashbox", "samples\MediatR.Examples.Stashbox\MediatR.Examples.Stashbox.csproj", "{F9148E20-5856-484C-8410-B515C6C56214}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediatR.DependencyInjectionTests", "test\MediatR.DependencyInjectionTests\MediatR.DependencyInjectionTests.csproj", "{C761C0E2-0655-40FB-98E9-1504D03DD930}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -105,6 +107,10 @@ Global
{F9148E20-5856-484C-8410-B515C6C56214}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9148E20-5856-484C-8410-B515C6C56214}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9148E20-5856-484C-8410-B515C6C56214}.Release|Any CPU.Build.0 = Release|Any CPU
{C761C0E2-0655-40FB-98E9-1504D03DD930}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C761C0E2-0655-40FB-98E9-1504D03DD930}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C761C0E2-0655-40FB-98E9-1504D03DD930}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C761C0E2-0655-40FB-98E9-1504D03DD930}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -123,6 +129,7 @@ Global
{004D029A-43E7-47B0-BA74-D0A9F7FC7713} = {E372BF0B-90E8-4DC1-A332-F023095A3C2A}
{7CEB57F2-B6DC-4A18-A040-D12555C3D32F} = {E372BF0B-90E8-4DC1-A332-F023095A3C2A}
{F9148E20-5856-484C-8410-B515C6C56214} = {E372BF0B-90E8-4DC1-A332-F023095A3C2A}
{C761C0E2-0655-40FB-98E9-1504D03DD930} = {962C5ACA-AB2B-4E9B-9EBB-7E7EE28CDBB1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D58286E3-878B-4ACB-8E76-F61E708D4339}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using Microsoft.Extensions.DependencyInjection;

namespace MediatR.DependencyInjectionTests.Abstractions;

public abstract class BaseAssemblyResolutionTests : IClassFixture<BaseServiceProviderFixture>
{
private readonly IServiceProvider _provider;

protected BaseAssemblyResolutionTests(BaseServiceProviderFixture fixture) =>
_provider = fixture.Provider;

[Fact]
public void Should_Resolve_Mediator() =>
_provider.GetService<IMediator>()
.ShouldNotBeNull();

#region REQUESTS

[Fact]
public void Should_Resolve_Public_RequestHandler() =>
_provider.GetService<IRequestHandler<PublicPing, Pong>>()
.ShouldNotBeNull();

[Fact]
public void Should_Resolve_Internal_RequestHandler() =>
_provider.GetService<IRequestHandler<InternalPing, Pong>>()
.ShouldNotBeNull();

[Fact]
public void Should_Resolve_Private_RequestHandler() =>
_provider.GetService<IRequestHandler<PrivatePing, Pong>>()
.ShouldNotBeNull();

#endregion

#region VOID_REQUESTS

[Fact]
public void Should_Resolve_Public_Void_RequestHandler() =>
_provider.GetService<IRequestHandler<PublicVoidPing>>()
.ShouldNotBeNull();

[Fact]
public void Should_Resolve_Internal_Void_RequestHandler() =>
_provider.GetService<IRequestHandler<InternalVoidPing>>()
.ShouldNotBeNull();

[Fact]
public void Should_Resolve_Private_Void_RequestHandler() =>
_provider.GetService<IRequestHandler<PrivateVoidPing>>()
.ShouldNotBeNull();

#endregion
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace MediatR.DependencyInjectionTests.Abstractions;

public class BaseServiceProviderFixture
{
public virtual IServiceProvider Provider => throw new NotImplementedException();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using MediatR.DependencyInjectionTests.Abstractions;
using MediatR.DependencyInjectionTests.Providers;

namespace MediatR.DependencyInjectionTests;

public class AutoFacDependencyInjectionTests : BaseAssemblyResolutionTests
{
public AutoFacDependencyInjectionTests() : base(new AutoFacServiceProviderFixture()) { }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MediatR.DependencyInjectionTests.Contracts.Requests;

internal record InternalPing : IRequest<Pong>
{
internal class Handler : IRequestHandler<InternalPing, Pong>
{
public Task<Pong> Handle(InternalPing request, CancellationToken cancellationToken) =>
Task.FromResult(new Pong());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MediatR.DependencyInjectionTests.Contracts.Requests;

internal record InternalVoidPing : IRequest
{
internal class Handler : IRequestHandler<InternalVoidPing>
{
public Task Handle(InternalVoidPing request, CancellationToken cancellationToken) =>
Task.CompletedTask;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MediatR.DependencyInjectionTests.Contracts.Requests;

public record PrivatePing : IRequest<Pong>
{
private class Handler : IRequestHandler<PrivatePing, Pong>
{
public Task<Pong> Handle(PrivatePing request, CancellationToken cancellationToken) =>
Task.FromResult(new Pong());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MediatR.DependencyInjectionTests.Contracts.Requests;

public record PrivateVoidPing : IRequest
{
private class Handler : IRequestHandler<PrivateVoidPing>
{
public Task Handle(PrivateVoidPing request, CancellationToken cancellationToken) =>
Task.CompletedTask;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MediatR.DependencyInjectionTests.Contracts.Requests;

public record PublicPing : IRequest<Pong>
{
public class Handler : IRequestHandler<PublicPing, Pong>
{
public Task<Pong> Handle(PublicPing request, CancellationToken cancellationToken) =>
Task.FromResult(new Pong());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MediatR.DependencyInjectionTests.Contracts.Requests;

public record PublicVoidPing : IRequest
{
public class Handler : IRequestHandler<PublicVoidPing>
{
public Task Handle(PublicVoidPing request, CancellationToken cancellationToken) =>
Task.CompletedTask;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace MediatR.DependencyInjectionTests.Contracts.Responses;

public record Pong;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using MediatR.DependencyInjectionTests.Abstractions;
using MediatR.DependencyInjectionTests.Providers;

namespace MediatR.DependencyInjectionTests;

public class DryIocDependencyInjectionTests : BaseAssemblyResolutionTests
{
public DryIocDependencyInjectionTests() : base(new DryIocServiceProviderFixture()) { }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\MediatR\MediatR.csproj"/>
</ItemGroup>


<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
<PackageReference Include="Shouldly" Version="4.2.1"/>
<PackageReference Include="xunit" Version="2.5.3"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0"/>
<PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0"/>
<PackageReference Include="Autofac" Version="7.1.0"/>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0"/>
</ItemGroup>

<ItemGroup>
<Using Include="Xunit"/>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using MediatR.DependencyInjectionTests.Abstractions;
using MediatR.DependencyInjectionTests.Providers;

namespace MediatR.DependencyInjectionTests;

public class MicrosoftDependencyInjectionTests : BaseAssemblyResolutionTests
{
public MicrosoftDependencyInjectionTests() : base(new MicrosoftServiceProviderFixture()) { }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using Autofac;
using Autofac.Extensions.DependencyInjection;
using MediatR.DependencyInjectionTests.Abstractions;
using Microsoft.Extensions.DependencyInjection;

namespace MediatR.DependencyInjectionTests.Providers;

public class AutoFacServiceProviderFixture : BaseServiceProviderFixture
{
public override IServiceProvider Provider
{
get
{
var services = new ServiceCollection();
services.AddMediatR(x => x.RegisterServicesFromAssemblyContaining(typeof(Pong)));

var builder = new ContainerBuilder();
builder.Populate(services);

var container = builder.Build();
return new AutofacServiceProvider(container);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using DryIoc;
using DryIoc.Microsoft.DependencyInjection;
using MediatR.DependencyInjectionTests.Abstractions;

namespace MediatR.DependencyInjectionTests.Providers;

public class DryIocServiceProviderFixture : BaseServiceProviderFixture
{
public override IServiceProvider Provider
{
get
{
var container = new Container();
container.RegisterMany(new[] { typeof(IMediator).GetAssembly(), typeof(Pong).GetAssembly() }, Registrator.Interfaces);
container.Register<IMediator, Mediator>(made: Made.Of(() => new Mediator(Arg.Of<IServiceProvider>())));
return container.BuildServiceProvider();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using MediatR.DependencyInjectionTests.Abstractions;
using Microsoft.Extensions.DependencyInjection;

namespace MediatR.DependencyInjectionTests.Providers;

public class MicrosoftServiceProviderFixture : BaseServiceProviderFixture
{
public override IServiceProvider Provider => new ServiceCollection()
.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(PublicPing).Assembly))
.BuildServiceProvider();
}
3 changes: 3 additions & 0 deletions test/MediatR.DependencyInjectionTests/Usings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
global using MediatR.DependencyInjectionTests.Contracts.Requests;
global using MediatR.DependencyInjectionTests.Contracts.Responses;
global using Shouldly;
Loading