我在 .Net Core 项目中使用 Mediatr,我想知道 Mediatr 中的处理程序是单例还是每个发送请求的新实例;我知道 Mediatr 是单例,但对于它用于命令或查询的处理程序,我不太确定。
我倾向于认为他们也会是单身人士;但只是想再次确认。
事实上,所有这些东西的生命周期都有详细记录 https://github.com/jbogard/MediatR.Extensions.Microsoft.DependencyInjection/blob/master/README.md
仅供参考: IMediator 是瞬态的(不是单例), IRequestHandler<> 具体实现是瞬态的等等,所以实际上它在任何地方都是瞬态的。
但请注意将 Scoped 服务与 Mediatr 处理程序一起使用,它不会按预期工作,更像单例,除非您手动创建范围。
对于处理程序,按照源代码进行操作后,看起来它们都被添加为 Transient。
services.AddTransient(@interface, type);
Run Code Online (Sandbox Code Playgroud)
对于 IMediator 本身,默认情况下它看起来是有生命周期的:
services.Add(new ServiceDescriptor(typeof(IMediator), serviceConfiguration.MediatorImplementationType, serviceConfiguration.Lifetime));
Run Code Online (Sandbox Code Playgroud)
请注意,服务配置是一个配置对象,除非您以某种方式沿其默认路径更改它,否则它也将被设置为瞬态:
public MediatRServiceConfiguration()
{
MediatorImplementationType = typeof(Mediator);
Lifetime = ServiceLifetime.Transient;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9654 次 |
| 最近记录: |