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

.NET Core 3.1控制台如何实现构造函数DI注入与手动传参混合使用?

基于Ninject实现构造函数混合传参的解决方案

步骤1:修正基础代码与绑定配置

首先修正拼写错误(你之前代码里的IConfiguraiton为拼写错误,应为IConfiguration),同时调整类定义和DI绑定逻辑:

// MyClass定义,保留双参数构造函数
public class MyClass
{
    public MyClass(IConfiguration config, int myVal)
    {
        // 业务逻辑实现
    }
}

// Ninject绑定模块修正
public class Bindings : NinjectModule
{
    // 配置初始化逻辑
    private IConfiguration SetupConfiguration()
    {
        return new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
    }

    public override void Load()
    {
        // 绑定IConfiguration为单例
        Bind<IConfiguration>().ToMethod(ctx => SetupConfiguration()).InSingletonScope();
        // MyClass绑定到自身,生命周期保持瞬态
        Bind<MyClass>().ToSelf().InTransientScope();
    }
}

步骤2:实例化时传入自定义参数

Ninject提供ConstructorArgument类用来指定手动传入的构造参数,你只需要在调用Get<MyClass>()时传入对应的参数即可,剩下的参数会自动从DI容器中解析:

static void Main()
{
    var kernel = new StandardKernel();
    kernel.Load(Assembly.GetExecutingAssembly());
    
    // 手动传入myVal参数,IConfiguration由容器自动注入
    var myObj1 = kernel.Get<MyClass>(new ConstructorArgument("myVal", 1));
    var myObj2 = kernel.Get<MyClass>(new ConstructorArgument("myVal", 2));
}

可选优化:使用工厂模式解耦(推荐)

如果不想在业务代码中直接依赖IKernel,可以通过抽象工厂的方式封装传参逻辑,更符合依赖倒置原则:

// 定义工厂接口
public interface IMyClassFactory
{
    MyClass Create(int myVal);
}

// 绑定逻辑新增工厂绑定
Bind<IMyClassFactory>().ToFactory().InSingletonScope();

// 业务代码使用方式
public class YourBusinessService
{
    private readonly IMyClassFactory _factory;
    // 注入工厂
    public YourBusinessService(IMyClassFactory factory)
    {
        _factory = factory;
    }

    public void Test()
    {
        // 直接调用Create方法传自定义参数即可
        var myObj1 = _factory.Create(1);
        var myObj2 = _factory.Create(2);
    }
}

注:使用ToFactory()方法需要提前安装Ninject.Extensions.Factory NuGet包,Ninject会自动生成工厂的实现类,无需手动编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:54:02