我正在开发一个组件,其中一个要求是它对我公司的专有代码没有编译依赖性。另一个要求是它需要使用我们的专有日志框架进行日志记录。
我想知道是否有一个接口,最好是在.net框架中,我可以使用它来实现我们的日志框架的适配器,这将允许我在运行时使用反射加载它。其他可能想要使用log4net之类的代码用户会重复此过程。
我也对其他涉及运行时依赖性的解决方案持开放态度。我的后备是在源控件中创建一个具有日志记录依赖关系的分支,并发布一个不具有日志记录的分支。
答案 0 :(得分:1)
我为第三方应用程序设置了类似的东西。一种攻击计划是使用适配器模式和选择器(工厂模式或其他)来选择运行时所需的具体适配器。在我的情况下,我确实引用了第三方DLL,当DLL由于JIT后期绑定而不可用时,这不是问题。
但是,因为您说“编译时间要求”,所以似乎不能选择引用DLL。在这种情况下,我建议您查看可以挂钩的AssemblyResolve事件并提供DLL的路径(如网络位置)。 AssemblyResolve可以在您的App上引入性能。
答案 1 :(得分:0)
我假设您将不可避免地需要在您公司的专有日志记录框架和新组件之间共享一些日志记录接口。如果是这样,您可以将这些接口放在您公司的日志记录框架和新组件都将引用的单独程序集上,然后使用MEF为您执行IoC。当然,这将涉及对现有日志框架的一些修改,如果尚未在混合中使用MEF设计的那么。
答案 2 :(得分:0)
我发现的最好方法是在.net中使用Trace框架。您仍然需要实现一个接口,但此接口对于框架是通用的,而不是特定项目。此外,许多日志记录框架已经实现了它(如NLog)。
请参阅TraceListeners