【发布时间】:2017-09-27 18:20:07
【问题描述】:
我正在从事一个新项目,我想将 serilog 与 ninject 集成。
用例如下:
- 有很多常用库
- 这些库用于许多模块,即插件。这些插件在运行时都会收到一个唯一的 GUID。这 是抽象插件类的基础属性,每个 插件的实现继承
- 我们希望将此唯一名称附加到插件生成的每条日志消息中
以及从该插件对公共库的任何调用,以便日志
消息可以追溯到制作它的插件的唯一实例
- 我们不希望修改公共库中的每个类来接收记录器以用于记录
我的想法是:
- 创建单例记录器提供程序。这将被任何需要记录的东西调用。
- 使用 postsharp 和 CallContext.LogicalSetData 在调用日志记录提供程序之前设置 GUID
- 使用 CallContext.LogicalGetData 在单例记录器提供程序中获取 GUID。这将使用 Logger.ContextFor 检索该 GUID 的现有记录器,或者创建一个新记录器以添加到字典中。
- 始终在请求时使用 Ninject 将 ILoggerProvider 解析为单例提供程序
在我走这条迂回路线之前,有没有更好的方法来做到这一点,也许是 ninject?
感谢阅读。
【问题讨论】:
标签: dependency-injection ninject aop postsharp serilog