Yah*_*ein 10 c# .net-core .net-core-3.0
我有一个使用Microsoft.Extensions.Logging.Internal
命名空间的 .Net core 2.1 项目,特别是FormattedLogValues
类。
我现在正在迁移到 .Net core 3,我找不到关于FormattedLogValues
移动到哪里或其替代品的文档。
甚至删除了命名空间文档
有小费吗?
Nod*_*.JS 11
我通过更新moq
到“4.13.1”并利用It.IsAnyType
.
_logger.Verify(f => f.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.IsAny<It.IsAnyType>(),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>) It.IsAny<object>()));
Run Code Online (Sandbox Code Playgroud)
这实际上取决于您对类型所做的操作,但是查看github 源中的代码,它看起来该类型仍然存在,但是是内部的 - 这意味着只有库本身才能实际访问该类型,除非您已经得到了程序集InternalsVisibleTo("")
- 但我们现在将忽略它。
所以类型本身是一个有点奇怪的实现,IReadOnlyList<KeyValuePair<string, object>>
但这意味着如果你正在测试进入记录器的值,你可以像这样访问:
logger.State[0][0].Value
此处的“状态”是库中定义的内容,因此希望对术语很熟悉。
如果您使用的是 Moq 或等效项,您可能可以使用:
_logger.Verify(f => f.Log(
It.IsAny<LogLevel>(),
It.IsAny<EventId>(),
It.IsAny<IReadOnlyList<KeyValuePair<string, object>>>(),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>) It.IsAny<object>()));
Run Code Online (Sandbox Code Playgroud)
如果要在自己的记录器中使用它,则必须创建自己的继承自该类的类:
public class MyLogValues : IReadOnlyList<KeyValuePair<string, object>> {}
Run Code Online (Sandbox Code Playgroud)
然后两个类都可以简化为接口
希望这会有所帮助,我认为这取决于您将类型用于.