C# 用静态构造函数理解网关模式

C# 用静态构造函数理解网关模式,c#,design-patterns,gateway,C#,Design Patterns,Gateway,我正在关注这个链接: 了解网关模式 作者分享了“网关”记录器类和相关接口的示例: public class Log { private static ILogFactory logFactory; public static void InitializeLogFactory(ILogFactory logFactory) { Log.logFactory = logFactory; } public void Informationa

我正在关注这个链接: 了解网关模式

作者分享了“网关”记录器类和相关接口的示例:

public class Log
{
    private static ILogFactory logFactory;

    public static void InitializeLogFactory(ILogFactory logFactory)
    {
        Log.logFactory = logFactory;
    }

    public void InformationalMessage(string informationalMessage)
    {
        logFactory.Create().InformationalMessage(informationalMessage);
    }
}

public interface ILogFactory
{
    ILog Create();
}

public interface ILog
{
    void InformationalMessage(string message);
}
这是调用API

public class Calculator
{                
public int Add(int number1,int number2)
{
Log.InformationalMessage("About to add two numbers");            
return number1 + number2;
}
}

我无法理解具体日志类的初始化发生在哪里。网关的入口点是什么?

编辑:请忽略此项,它是不正确的。我不删除的唯一原因是,我对指出它的人的回复可以保留

请注意,“Log”类具有静态构造函数:

public static void InitializeLogFactory(ILogFactory logFactory)
    {
        Log.logFactory = logFactory;
    }
第一次加载
Log
类时(在第一次引用时),静态构造函数将运行,使用工厂的具体实现初始化其
logFactory


然后,每次调用
InformationalMessage
,都会使用具体工厂创建一个记录器实例来记录消息

这个示例的布局方式有点欺骗,因为API的调用与第一个示例更相关。注意下面调用init的测试用例。此外,您将有一个作者没有的日志实例,在示例中更具象征性。另一个选项是静态日志类。

关于接口的具体实现,本文底部有一些示例,展示了如何实现它。

在文章底部,作者说:“最后,这里是一个ILogFactory/ILog对的快速实现,该对将向控制台输出日志消息(我将让您自行设计以下两个类的更易于测试的实现):“@Ric,谢谢你指出这一点。我终于明白了。在弄清楚这一部分之前,我拒绝继续写这篇文章。这不是构造函数,这是一个公开的静态方法。构造函数名和类名应该匹配,至少在C#中是这样。对不起,完全正确。。。对我来说,现在是早起的时候了。我必须承认,当我读到他的文章时,我认为它太复杂了,没有真正的收获。如果您沉迷于命名模式,这里的相关模式应该是ServiceBroker模式。ServiceBroker模式。有趣。我得去看看。在这种情况下,
InitializeLogFactory
将不会运行,除非显式调用它,对吗?没错!显然,
InformationalMessage
方法需要一个Log类的实例。我想知道作者是如何没有得到构建错误的。如果您能帮助我使用正确的调用API,那就太完美了。试图弄明白这一点时,我不知所措:|本文底部有一个类的实现!