如何封装OpenTelemetry抽象类?内部库API封装难题求助
封装OpenTelemetry抽象类以隐藏公共API的问题
我正在使用OpenTelemetry,想要通过内部库封装其逻辑,避免业务项目直接使用OpenTelemetry(OT)公共API,防止相关逻辑分散,确保所有操作集中在一处。我通过以下配置限制公共API的暴露:
<PackageReference Include="OpenTelemetry" Version="1.5.1" PrivateAssets="All" />
常规继承场景下一切正常——我可以继承基础逻辑,甚至通过标记接口在内部层对其进行操作,例如:
public class OtlpOptions : OtlpExporterOptions { }
我希望隐藏OT API,通过扩展方法提供简洁的通用访问方式,示例调用如下:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenTelemetryTracing().WithOtelExporter().WithConsoleExporter(); builder.Services.AddOpenTelemetryMetrics().WithConsoleExporter();
但问题在于OpenTelemetry存在大量抽象类,比如TracerProviderBuilder,我无法在不引用该抽象类的情况下为其创建标记接口,这导致封装失效,业务项目必须引入特定的OT引用才能调用。我想了解如何封装这类抽象类?
更新:
发现一个奇怪的现象:调用扩展方法tpBuilder.WithOtelExporter()时需要业务项目引入OT引用,但调用静态方法MyOpenTelemetryExtension.WithOtelExporter(tpBuilder)则不需要。
内容的提问来源于stack exchange,提问作者AleksP
相关产品推荐
相关产品推荐

