0

NLog 提供了一个工厂,用于指定如何创建设置 NLog 时使用的类的不同实例,例如目标和渲染器。

ConfigurationItemFactory.Default.CreateInstance

我有一堆单元测试(XUnit),它们依赖于能够配置这个函数来使用我的自定义日志记录功能测试不同的行为。但是,此函数仅在启动 appdomain 后请求第一个记录器时运行一次。这会导致在同一 appdomain 中运行的所有其他测试出现问题,因为 NLog 框架CreteInstance在 appdomain 重新启动之前不会再次执行,例如在运行 Visual Studio XUnit 运行程序时不会再次执行。

如何强制 NLog 重新创建指定的不同类型CreteInstance

4

2 回答 2

0

感谢您的答复。但是,我不想重置为默认值,我希望能够在测试之间更改配置。

通过在测试执行后设置ConfigurationItemFactory.Default.CreateInstance然后执行LogManager.Configuration = LogManager.Configuration.Reload();和重置工厂(通过将默认工厂设置为null,如您所说),或者通过设置CreteInstance回原来的值来达到目的。

我必须说我不喜欢这种实施。如何重置 NLog 令人困惑。你会认为LogManager.Shutdown();会做的伎俩,但没有。另外,我认为重点ConfigurationItemFactory是提供自定义依赖解析。但由于它只为每种类型运行一次,它完全忽略了任何范围。应该是CreteInstance通过使用 IOC 容器来决定在需要解决问题时做什么。

于 2017-07-20T09:08:05.287 回答
0

将默认值设置为null,下次将创建新的默认值。

ConfigurationItemFactory.Default = null;
于 2017-07-02T08:49:45.773 回答