.NET Core使用C# SDK实例化DocuSign ApiClient的优化方式咨询
.NET 6 集成DocuSign SDK时ApiClient单例注入方案
结论:完全可以实现一次实例化全局复用,不需要每次调用SDK方法都重新初始化ApiClient
不需要自定义中间件来做实例创建,直接利用.NET 6内置的依赖注入容器注册单例服务,就能保证整个应用生命周期内只执行一次ApiClient实例化,所有业务类都可以注入复用,这也是生产环境的常用实践。
具体实现步骤
- 第一步:在
Program.cs中注册单例ApiClient
var builder = WebApplication.CreateBuilder(args); // 从配置中读取DocuSign服务基地址 var docuSignBasePath = builder.Configuration.GetValue<string>("DocuSign:BasePath"); // 注册单例ApiClient,整个应用只会执行一次new操作 builder.Services.AddSingleton(new ApiClient(docuSignBasePath)); // 注册你的业务服务 builder.Services.AddScoped<IDocuSignService, DocuSignService>();
- 第二步:在业务类中通过构造函数注入使用
public class DocuSignService : IDocuSignService { private readonly ApiClient _docuSignClient; // 构造函数直接注入DI容器中的单例实例 public DocuSignService(ApiClient docuSignClient) { _docuSignClient = docuSignClient; } public async Task<EnvelopeSummary> SendEnvelopeAsync(SendEnvelopeRequest request) { // 每次调用前单独配置当前请求的身份令牌,不要在初始化时固定配置 _docuSignClient.Configuration.DefaultHeader["Authorization"] = $"Bearer {request.AccessToken}"; var envelopesApi = new EnvelopesApi(_docuSignClient); // 调用SDK方法执行业务逻辑 return await envelopesApi.CreateEnvelopeAsync(request.AccountId, request.EnvelopeDefinition); } }
注意事项
- 禁止在单例ApiClient初始化时固定配置AccessToken、AccountId这类和用户/请求上下文绑定的参数,这类参数有效期短、和具体调用身份绑定,必须在每次接口调用前动态赋值,否则会出现身份串用、令牌过期导致调用失败的问题。
- DocuSign官方提供的C# SDK中ApiClient本身做了线程安全适配,单例复用不会出现请求冲突问题,相比每次调用重新实例化,能减少重复初始化的内存和性能开销。
- 如果需要同时对接DocuSign多个环境(比如演示环境、生产环境使用不同基地址),不要注册全局单例,可以通过命名服务的方式按不同基地址注册多个实例,按需注入使用。
- 如果确实要通过中间件创建实例,需要将创建好的实例存入DI容器或者请求上下文可访问的全局位置,本质和直接DI注册单例逻辑一致,但实现更繁琐,不推荐。
内容的提问来源于stack exchange,提问作者AaR
相关产品推荐
相关产品推荐

