使用依赖关系注入将唯一值传递给所有类
本文关键字:值传 唯一 依赖 关系 注入 | 更新日期: 2023-09-27 18:33:52
以下代码显示了我当前尝试在 WCF 服务中实现的流。启动时的服务调用引导程序类,该类使用 Unity 注册和解析所需的类型。Gateway 类包含公共方法,然后启动处理消息的主流(代码的级别比下面显示的要多得多)。
public static class Bootstrapper
{
public static IGateway InitializeGateway()
{
IUnityContainer resolver = new UnityContainer();
resolver.RegisterType<IGateway, Gateway>();
resolver.RegisterType<ITranslator, Translator>();
resolver.RegisterType<IFormatter, IFormatter>();
return resolver.Resolve<IGateway>();
}
}
public class Gateway : IGateway
{
private readonly ITranslator translator;
private readonly IFormatter formatter;
public Gateway(ITranslator translator, IFormatter formatter)
{
this.translator = translator;
this.formatter = formatter;
}
public string ProcessMessage(string requestMessage)
{
// Create a new GUID for use in main flow for logging
Guid messageGuid = Guid.NewGuid();
requestMessage = this.translator.TranslateMessage(requestMessage);
requestMessage = this.formatter.FormatMessage(requestMessage);
return requestMessage;
}
}
现在我要实现的是获取 GUID(为每条消息创建)并将其传递到服务流中,以便每个类都有对它的引用以进行日志记录。
我试图找到一种使用 DI 和构造函数注入的方法,但不知道是否可以这样做,因为 GUID 是在网关收到消息时创建的(在引导程序调用之后)。我试图摆脱的是将 GUID 作为参数传递到每个方法中。
有什么建议吗?
与其使用 DI 来滚动自己的解决方案,不如使用线程静态属性 Trace.CorrelationManager.ActivityId 来实现此目的。
查看这篇有关 WCF 端到端跟踪的文章。