1

我正在开发一个组件,其中一个要求是它对我公司的专有代码没有编译依赖项。另一个要求是它需要使用我们专有的日志框架进行日志记录。

我想知道是否有一个接口,最好是在 .net 框架中,我可以使用它来实现我们的日志框架的适配器,这将允许我在运行时使用反射加载它。可能想要使用 log4net 之类的代码的其他用户将重复此过程。

我也对其他涉及运行时依赖的解决方案持开放态度。我的回退是在源代码控制中创建一个具有日志记录依赖项的分支,并发布一个没有日志依赖的不同分支。

4

3 回答 3

1

我为第三方应用程序设置了类似的东西。一种攻击计划是使用适配器模式和选择器(工厂模式或其他)来选择运行时所需的具体适配器。就我而言,我确实引用了第 3 方 DLL,当由于 JIT 后期绑定而导致 DLL 不可用时,这不是问题。

但是,因为您说“编译时间要求”,所以引用 DLL 似乎不是一种选择。在这种情况下,我建议您查看AssemblyResolve事件,您可以挂钩并提供 DLL 的路径(如网络位置)。AssemblyResolve 可能会影响您的应用程序的性能。

于 2013-05-15T14:23:44.413 回答
0

我假设您将不可避免地需要在您公司的专有日志框架和新组件之间共享一些日志接口。如果是这样,您可以将这些接口放在您公司的日志框架和新组件都将引用的单独程序集中,然后使用MEF为您执行 IoC。如果尚未在混合中使用 MEF 进行设计,这当然将涉及对现有日志记录框架的一些修改。

于 2013-05-15T14:38:32.437 回答
0

我发现最好的方法是使用 .net 中的 Trace 框架。你仍然需要实现一个接口,但是这个接口是框架通用的,而不是特定项目的。此外,许多日志框架已经实现了它(如 NLog)。

TraceListeners

于 2013-08-08T15:11:20.480 回答