Autofac注入MediatR

下载依赖包

dotnet add package MediatR
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection
dotnet add package Autofac
dotnet add package Autofac.Extensions.DependencyInjection

在Program或者Startup中用autofac替换原生的DI

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

注册MediatR

using Autofac;
using MediatR.Extensions.Autofac.DependencyInjection;
using MediatR.Extensions.Autofac.DependencyInjection.Builder;

public class MediatorModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        var assemblies = new[]
        {
            Assembly.GetExecutingAssembly(),
            typeof(TransferCommandHandler).Assembly
        };

        // Step 2: Configure MediatR with Autofac
        var mediatRConfig = MediatRConfigurationBuilder.Create(assemblies)
            .WithAllOpenGenericHandlerTypesRegistered()
            .WithRegistrationScope(RegistrationScope.Scoped) // Optional: Scoped/Transient/Singleton
            .Build();

        // Step 3: Register MediatR with Autofac
        builder.RegisterMediatR(mediatRConfig);
    }
}

注册到Autofac

builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
    containerBuilder.RegisterModule(new AutofacMediatRModule());
});

添加MediatR的处理事件

public class TestCommandQuery : IRequest<string>
{}

public class TestCommandHandler: IRequestHandler<TestCommandQuery, string>
{
	public async Task<string> Handle(TestCommandQueryrequest, CancellationToken cancellationToken)
	{
    	await Task.CompletedTask;
    	return "Test";
	}

使用Mediat处理消息

public class TestController : Controller
{
	private readonly IMediator _mediator;
	public TestController(IMediator mediator)
	{
		_mediator = mediator;
	}
	public async Task<IActionResult> GetTest()
	{
		var request = new TestCommandQuery();
		var res = await _mediator.Send(request);
		return OK(res);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值