使用依赖关系注入将唯一值传递给所有类

本文关键字:值传 唯一 依赖 关系 注入 | 更新日期: 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 端到端跟踪的文章。