You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从LightInject迁移到.NET Core DI容器的等效注册方式咨询

LightInject迁移至.NET Core内置DI容器的等效注册实现

a. 构造函数依赖注册的等效实现

原LightInject代码的作用是全局为所有构造函数中的IBar类型参数指定固定的创建逻辑,.NET Core DI中常规场景可直接通过服务注册实现:

// 生命周期可根据原业务需求替换为AddScoped/AddSingleton
services.AddTransient<IBar>(serviceProvider => new Bar());

如果原逻辑需要用到入参的parameterInfo做差异化注入(比如根据参数名、所属服务类型返回不同实现),.NET Core DI原生没有直接对应的封装API,可通过自定义服务工厂、或者使用ActivatorUtilities自定义构造逻辑实现。

b. 带参数的工厂委托注册的等效实现

原LightInject代码是注册一个接收用户名、密码参数的委托,委托执行时会从容器中拉取IBusinessLogic实例来构造MemCache对象。注意原代码中注册的Func<string, string>签名和实际委托返回值不匹配,属于笔误,实际应为Func<string, string, MemCache>,等效实现如下:

// 先注册IBusinessLogic的对应实现,生命周期和原有逻辑保持一致即可
services.AddTransient<IBusinessLogic, YourBusinessLogicImpl>();

// 注册工厂委托,单例生命周期即可,委托执行时会从当前作用域获取服务
services.AddSingleton<Func<string, string, MemCache>>(sp => 
    (username, password) => new MemCache(username, password, sp.GetRequiredService<IBusinessLogic>()));

如果实际业务中委托的返回值确实为string,按需调整工厂返回值即可。

内容的提问来源于stack exchange,提问作者191180rk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:04