.net core 他们是单身吗?

.net core 他们是单身吗?,.net-core,mediatr,.net Core,Mediatr,我在我的.Net核心项目中使用Mediatr,我想知道Mediatr中的处理程序是singleton的还是每个发送请求的新实例;我知道Mediatr是单例的,但对于它用于命令或查询的处理程序,我不是很确定 我倾向于认为他们也是单身汉;但是我只是想再次确认一下。对于处理程序,在遵循源代码之后,看起来它们都是作为瞬态添加的 对于IMediator本身,默认情况下它也是瞬态的: 请注意,服务配置是一个配置对象,除非您以某种方式沿其默认路径对其进行更改,否则它也将设置为瞬态: public Medi

我在我的.Net核心项目中使用Mediatr,我想知道Mediatr中的处理程序是singleton的还是每个发送请求的新实例;我知道Mediatr是单例的,但对于它用于命令或查询的处理程序,我不是很确定


我倾向于认为他们也是单身汉;但是我只是想再次确认一下。

对于处理程序,在遵循源代码之后,看起来它们都是作为瞬态添加的

对于IMediator本身,默认情况下它也是瞬态的:

请注意,服务配置是一个配置对象,除非您以某种方式沿其默认路径对其进行更改,否则它也将设置为瞬态:

public MediatRServiceConfiguration()
{
    MediatorImplementationType = typeof(Mediator);
    Lifetime = ServiceLifetime.Transient;
}

使用core,您可以手动注册处理程序并使用您想要的任何作用域。例如:

services.AddScoped<IPipelineBehavior<MyCommand>, MyHandler>();
services.addScope();
我们实际上包装了Mediatr,这样我们就可以添加各种位和BOB,这样它就变成了这样的注册扩展(CommandContect/QueryContext保存了我们一直使用的各种东西,ExecutionResponse是一个标准响应,这样我们就可以有标准的post处理程序,知道它们得到了什么):

公共静态IServiceCollection AddCommandHandler(此IServiceCollection服务)
其中,坦德勒:阶级,伊佩林行为
其中TCommand:ICommand
{
services.addScope();
返回服务;
}
它是这样使用的:

services.AddCommandHandler<MyHandler, MyCommand>();
services.AddCommandHandler();

我们有类似的查询(AddQueryHandler事实上,所有这些东西的生命周期都是有很好的文档记录的

仅供参考:IMediator是瞬态的(不是单例),IRequestHandler的具体实现是瞬态的,等等,所以实际上它在任何地方都是瞬态的

但是请注意,在Mediatr处理程序中使用作用域服务,除非您手动创建作用域,否则它的工作方式与预期不同,更像是单例

services.AddScoped<IPipelineBehavior<MyCommand>, MyHandler>();
public static IServiceCollection AddCommandHandler<THandler, TCommand>(this IServiceCollection services)
            where THandler : class, IPipelineBehavior<CommandContext<TCommand>, ExecutionResponse>
            where TCommand : ICommand
        {
            services.AddScoped<IPipelineBehavior<CommandContext<TCommand>, ExecutionResponse>, THandler>();
            return services;
        }
services.AddCommandHandler<MyHandler, MyCommand>();