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