c# - 将位置参数传递给 Ninject 中的构造函数

标签 c# ninject

使用 Ninject 3.0,我知道我可以在解析时将参数传递给具体服务的构造函数,因此:

IKernel kernel = new StandardKernel();
kernel.Bind<IService>.To<ConcreteService>();
MySettings mySettings = new DefaultConcreteServiceSettings();

IService service = kernel.Get<IService>(new[] { new ConstructorArgument("settings", mySettings) });

ConstructorArgument 对象有两个参数 - 第一个是要覆盖的参数的名称,第二个是它的注入(inject)值。

是否可以根据其在构造函​​数足迹中的位置而不是形式参数名称将 mySettings 注入(inject)到 IService 的构造函数中?

编辑

根据@nemesv 的要求,我为ConcreteService 添加了一些示例代码。我的动机基于一个概念,即根据 IService 的每个具体实现的参数名称,会使代码变得脆弱:

public class ConcreteService : IService
{
    readonly ISettings _settings;

    public ConcreteService(ISettings settings) 
    {
        _settings = settings;
    }
}

public class ConcreteServiceBySomePoorGuyWhoCantSpell : IService
{
    readonly ISettings _settings;

    public ConcreteServiceBySomePoorGuyWhoCantSpell(ISettings suttingz) 
    {
        _settings = suttingz;
    }
}

最佳答案

不,您必须通过将绑定(bind)用作 ToProvider、抽象工厂或使用位置参数的重载的每个组合的上下文绑定(bind)来解决这个问题,例如:

Bind<IService>().To<MyService>().WithConstructorArgument(...).Named(...)
Bind<IService>().To<MyService>().WithConstructorArgument(...).WhenInjectedInto(...)

关于c# - 将位置参数传递给 Ninject 中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21385734/

相关文章:

c# - 无参数 Controller 的 Ninject WebApi 错误

c# - 全局变量 v C# 中的设置

c# - 如何使用 LINQ C# 过滤列表

c# - Visual Studio Extensions - 支持多个版本的 VS

c# - 如何获取枚举显示名称

database - 注入(inject)和请求连接范围

asp.net-mvc-4 - 在 WebAPI 和 MVC 之间共享一个内核

c# - 从文本文件中读取行跳过读取行

c# - 使用 ninject.extensions.conventions 多次绑定(bind)服务

c# - 使用 ninject 的 Asp.net 成员身份提供程序 - 调用 Initialize 方法