我有一个范围
Context
,可以通过方法从transient
服务访问。
此 transient
服务正在被注入(inject)到singleton
服务中。
我的作用域
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
Controller ,而是来自队列接收器类。
或者解释一下,这种到单例的转换对于依赖注入(inject)树来说有多深。
最佳答案
不要从单例解析范围服务。它可能会导致服务在处理后续请求时出现不正确的状态。很好:
- 从作用域服务或 transient 服务解析单例服务。
- 从另一个范围服务或临时服务解析范围服务。
请查看此链接 Service lifetime
关于c# - 依赖注入(inject)作用域为 Transient,然后 Transient 为 Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64115733/