Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理没有循环引用的系统程序集的错误日志记录?_C#_.net_Circular Dependency_Error Logging - Fatal编程技术网

C# 如何处理没有循环引用的系统程序集的错误日志记录?

C# 如何处理没有循环引用的系统程序集的错误日志记录?,c#,.net,circular-dependency,error-logging,C#,.net,Circular Dependency,Error Logging,我有一个包装XML配置文件的.NET程序集。配置文件包含许多系统设置,包括错误日志文件的路径和文件名格式化信息。其他程序集通过singleton类引用此程序集: public sealed class SettingsManager { private static volatile SettingsManager manager; private static object syncRoot = new Object(); //... private Set

我有一个包装XML配置文件的.NET程序集。配置文件包含许多系统设置,包括错误日志文件的路径和文件名格式化信息。其他程序集通过singleton类引用此程序集:

public sealed class SettingsManager
{
    private static volatile SettingsManager manager;
    private static object syncRoot = new Object();

    //...

    private SettingsManager()
    {
        //load XML config file
    }

    public static SettingsManager Manager
    {
        get
        {
            if (manager == null)
            {
                lock (syncRoot)
                {
                    if (manager == null)
                        manager = new SettingsManager();
                }
            }
            return manager;
        }
    }

    //......
    //Methods getting and setting configuration data
    //......
}
我还有一个
Logging
程序集,它为系统其余部分中的错误处理和使用情况跟踪提供类。它引用
设置
库以确定将错误保存到何处:

SettingsManager.Manager.GetCurrentErrorFileName();
因此,
设置
程序集是项目中其他程序集的核心依赖项。但是如果我需要在
设置
库中记录错误,我不能很好地将
记录
程序集作为
设置
的参考,因为我将有一个循环参考

我遇到的问题是,如何处理
设置
库中的XML文件例程可能生成的错误? 我是否硬编码这些错误要写入的默认文件位置? 在这种情况下,最佳做法是什么

我考虑过系统事件日志,但这些程序集将用于Windows服务和托管的MVC网站。所以我不认为事件日志是一个选项

两个字

更有可能的是,您的
日志记录
程序集完全不需要了解
设置
程序集。它可能应该:

  • 希望在应用程序域中设置一些环境变量,告诉它在哪里登录,如果没有提供,则使用合理的默认值
  • 期望有东西告诉它在哪里记录(可能通过在记录器上设置属性)
  • 无论哪种选择,应用程序的入口点都是一个很好的地方。也许在开始的几行代码中,您会执行以下操作:

    Logger.LogFilePath = Settings.Manager.GetCurrentErrorFileName();
    

    我开发的大多数应用程序都是小型的内部项目,或者简单的.NET或MVC网站。但我对这个项目的了解越深入,我对IoC和依赖注入的概念就越感兴趣。但对我来说,这仍然是一个新概念。如果你知道关于IoC和依赖注入的其他好的参考资料,我很想知道它们是什么。(我现在正在读你链接到的di文章)。我喜欢这篇:,但这是一篇很长的文章。这是一本更短的书。或者如果你想要一本关于这个主题的书,你可以去马克·希曼那里看看。我想我要感谢你(或者责备你!)。我正在进行一些重大的重构。幸运的是,它还在项目的早期阶段,所以我可以负担得起。现在我已经理解了依赖注入的一般概念,我意识到我已经基本上做到了。但是,通过使用接口而不是具体类型来“解耦”类的想法对我来说是新的,也是促使重构的原因。这个项目也是我第一次真正尝试TDD。这是一条崎岖不平的路,但我马上就到了。我肯定已经看到了一些短期和长期的好处。