Skip to content

Commit

Permalink
convert to use microsoft .net default container
Browse files Browse the repository at this point in the history
  • Loading branch information
zachpainter77 committed Apr 18, 2024
1 parent 3bf18ee commit 338482e
Showing 1 changed file with 23 additions and 41 deletions.
64 changes: 23 additions & 41 deletions test/MediatR.Tests/SendTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,24 @@ namespace MediatR.Tests;
using Shouldly;
using Lamar;
using Xunit;

using Microsoft.Extensions.DependencyInjection;

public class SendTests
{
private readonly IServiceProvider _serviceProvider;
private Dependency _dependency;
private readonly IMediator _mediator;

public SendTests()
{
_dependency = new Dependency();
var services = new ServiceCollection();
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(typeof(Ping).Assembly));
services.AddSingleton(_dependency);
_serviceProvider = services.BuildServiceProvider();
_mediator = _serviceProvider.GetService<IMediator>()!;

}

public class Ping : IRequest<Pong>
{
Expand Down Expand Up @@ -62,6 +77,7 @@ public class GenericPingHandler<T> : IRequestHandler<GenericPing<T>, T>
where T : Pong
{
private readonly Dependency _dependency;

public GenericPingHandler(Dependency dependency) => _dependency = dependency;

public Task<T> Handle(GenericPing<T> request, CancellationToken cancellationToken)
Expand Down Expand Up @@ -254,56 +270,22 @@ public async Task Should_raise_execption_on_null_request()

[Fact]
public async Task Should_resolve_generic_handler_by_given_interface()
{
var dependency = new Dependency();
var container = new Container(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssemblyContainingType(typeof(PublishTests));
scanner.IncludeNamespace(typeof(GenericPing<>).Namespace);
scanner.WithDefaultConventions();
scanner.AddAllTypesOf(typeof(IRequestHandler<,>));
});
cfg.ForSingletonOf<Dependency>().Use(dependency);
cfg.For<ISender>().Use<Mediator>();
cfg.For<IRequestHandler<GenericPing<Pong>, Pong>>().Use<GenericPingHandler<Pong>>();
});

var mediator = container.GetInstance<ISender>();

object request = new GenericPing<Pong> { Pong = new Pong { Message = "Ping" } };
var result = await mediator.Send(request);
{
var request = new GenericPing<Pong> { Pong = new Pong { Message = "Ping" } };
var result = await _mediator.Send(request);

var pong = result.ShouldBeOfType<Pong>();
pong.Message.ShouldBe("Ping Pong");

dependency.Called.ShouldBeTrue();
_dependency.Called.ShouldBeTrue();
}

[Fact]
public async Task Should_resolve_generic_void_handler_by_given_interface()
{
var dependency = new Dependency();
var container = new Container(cfg =>
{
cfg.Scan(scanner =>
{
scanner.AssemblyContainingType(typeof(PublishTests));
scanner.IncludeNamespace(typeof(VoidGenericPing<>).Namespace);
scanner.WithDefaultConventions();
scanner.AddAllTypesOf(typeof(IRequestHandler<,>));
});
cfg.ForSingletonOf<Dependency>().Use(dependency);
cfg.For<ISender>().Use<Mediator>();
cfg.For<IRequestHandler<VoidGenericPing<Pong>>>().Use<VoidGenericPingHandler<Pong>>();
});

var mediator = container.GetInstance<ISender>();

var request = new VoidGenericPing<Pong>();
await mediator.Send(request);
await _mediator.Send(request);

dependency.Called.ShouldBeTrue();
_dependency.Called.ShouldBeTrue();
}
}

0 comments on commit 338482e

Please sign in to comment.