【发布时间】:2021-01-14 20:04:06
【问题描述】:
我有一个 scoped Context 正在通过方法从 transient 服务访问。
这个transient 服务被注入到singleton 服务中。
我的 scoped Context 会变成单例还是保持范围?
public class Context : IContext
{
public string CorrelationId { get; set; }
public Context(string id)
{
CorrelationId = id;
}
}
上下文访问器:
internal class RequestContextRegistrator : IRequestContextRegistrator
{
private IContext context;
public IContext RegisterContext(IContext context)
{
this.context = context;
return context;
}
public IContext Get()
{
return context ?? new Context()
{
CorrelationId = context.CorrelationId
};
}
}
单例对象:
public class QueueSender<TCommand>
{
private readonly IRequestContextRegistrator provider;
public QueueSender(IRequestContextRegistrator provider)
{
this.provider = provider;
}
public async Task Send(TCommand command)
{
var context = provider.Get();
var message = PrepareServiceBusMessage(command, userAgent, context?.CorrelationId);
}
}
整个想法是能够传递特定“请求”独有的上下文 ID。请求不是来自dotnet 控制器,它来自队列接收器类。
或者解释一下,这种到单例的转换对于依赖注入树的深度有多大。
【问题讨论】:
标签: c# asp.net .net .net-core dependency-injection