【问题标题】:Ninject bind generic to concrete typeNinject 将泛型绑定到具体类型
【发布时间】:2014-02-20 13:03:21
【问题描述】:

我想实现这种类型的绑定:

interface IService<T>
{
    T Get(int id);
}

class StringService : IService<string>
{
    public string Get(int id)
    {
        throw new NotImplementedException();
    }
}

kernel.Bind<IService<string>>().To<StringService>();

但它给了我一个错误,我已经看到了如何将 IService 绑定到 ConcreteService,但这不是我想要的。

更新 它抛出Ninject.ActivationException - “错误激活 IService 没有匹配的绑定可用,并且类型不是自绑定的”

【问题讨论】:

  • “它给了我一个错误”。什么错误?编译时?运行?请提供异常详细信息(消息、类型和堆栈跟踪)。
  • 可能StringService 类需要为internalpublic 才能让ninject 能够选择它的“默认构造函数”(无参数构造函数)。因为绑定证书应该是正确的,所以我们一直在使用它。
  • 如异常所述,您没有IService 的绑定(您只有IService&lt;string&gt; 的绑定!)。那么IService 接口是什么?真的是IService&lt;T&gt; : IService吗?

标签: c# .net dependency-injection ninject ioc-container


【解决方案1】:

试试这个:

kernel.Bind(typeof(IService<string>)).To(typeof(StringService));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多