Saltar al contenido

MediatR con ASP.NET Core DI

Esta división fue evaluado por especialistas para asegurar la veracidad de nuestro tutorial.

Solución:

En julio de 2016, Jimmy Bogard, autor de MediatR, lanzó un paquete para registrar MediatR y los controladores con el servicio ASP.Net Core DI (que en realidad es la interfaz IServiceCollectionimplementado en Microsoft.Extensions.DependencyInjection y cuyo uso no está restringido únicamente dentro de ASP.Net Core).

MediatR.Extensions.Microsoft.DependencyInjection

Enlace al Proyecto GitHub.

Vínculo a la información del paquete NuGet.

Puede encontrar una publicación de blog que presenta el paquete y sus capacidades aquí

Ejemplo de registro copiado directamente de la publicación de blog (muy breve):

public void ConfigureServices(IServiceCollection services)

  services.AddMvc();

  services.AddMediatR(typeof(Startup));

Este paquete realiza varias funciones para habilitar MediatR, incluida la exploración necesaria de ensamblajes para los controladores:

Puede pasar los ensamblajes donde se encuentran sus controladores, o puede pasar objetos Tipo desde los ensamblajes donde residen esos controladores. La extensión agregará la interfaz IMediator a sus servicios, todos los controladores y las fábricas de delegados correctas para cargar controladores. Luego, en su controlador, puede usar una dependencia de IMediator:

public class HomeController : Controller

  private readonly IMediator _mediator;

  public HomeController(IMediator mediator)
  
    _mediator = mediator;
  
  public IActionResult Index()
  
    var pong = _mediator.Send(new Ping Value = "Ping");
    return View(pong);
  

Lo tengo funcionando, mi código:

public void ConfigureServices(IServiceCollection services)

      services.AddScoped(p => t => p.GetRequiredService(t));
      services.AddScoped(p => t => p.GetRequiredServices(t));
      services.Scan(scan => scan
              .FromAssembliesOf(typeof(IMediator), typeof(MyHandlerOne.Handler))
              .FromAssembliesOf(typeof(IMediator), typeof(MyHandlerTwo.Handler))
             .AddClasses()
             .AsImplementedInterfaces());

y tengo una clase que implementa el GetRequiredService que necesita MultiInstanceFactory:

public static class GetServices

    public static IEnumerable GetRequiredServices(this IServiceProvider provider, Type serviceType)
    
        return (IEnumerable)provider.GetRequiredService(typeof(IEnumerable<>).MakeGenericType(serviceType));
    


valoraciones y comentarios

Si estás contento con lo expuesto, eres capaz de dejar un tutorial acerca de qué le añadirías a esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología