【发布时间】:2021-11-28 17:12:49
【问题描述】:
我们有一个大量使用依赖注入的 .NET Core 应用程序。在我们的类中,我们有一个引发的事件,然而,在这个事件中,我们想要使用一个 DI 对象的实例之一。然而这并不存在,这是可以理解的。
我们如何在事件中使用这个实例?
public class GetSQLDependancyHandler : IRequestHandler<SQLDependancyQuery>
{
private readonly ISqlDependancy _sqlDependancy;
private readonly IMapper _autoMapper;
private readonly IMediator _mediator;
private CancellationToken _cancellationToken;
public GetSQLDependancyHandler( IMapper autoMapper,
ISqlDependancy sqlDependancy,
IMediator mediator)
{
_autoMapper = autoMapper;
_sqlDependancy = sqlDependancy;
_mediator = mediator;
}
public async Task<Unit> Handle(SQLDependancyQuery request, CancellationToken cancellationToken)
{
await _sqlDependancy.IngnightSQLDependancy("ObservationAdmission", "ServiceBroker");
_sqlDependancy.OnTableUpdate += _sqlDependancy_OnTableUpdate1;
_cancellationToken = cancellationToken;
return Unit.Value;
}
private void _sqlDependancy_OnTableUpdate1(object sender, BroadCast e)
{
// THIS IS THE PART THAT DOESN'T EXIST
_mediator.Publish(new SQLDependancyDTO { Id = 1, Date = DateTime.Now, Message = "testmessage" }, _cancellationToken);
}
}
任何建议或我应该寻找的地方将不胜感激。
【问题讨论】:
-
IMediator的生命周期是多少?它是作用域,单例,...? -
我不能真正告诉你正确的答案,但我可以告诉你订阅 OnTableUpdate 不应该在处理程序中完成。要么将 OnTableUpdate1 代码拉入 Handle 方法,要么为该代码创建一个单独的处理程序
-
当您说“不存在”时,您的意思是它为空吗?对于初学者,将构造函数更改为使用
_mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));,这样您就可以确保它的构造正确。其次检查这个实例的生命周期,它是否在调用处理程序之前被释放?
标签: c# asp.net-core .net-core dependency-injection