【问题标题】:Error activating IEntityRepository{SomeEntity} More than one matching bindings are available. Matching bindings激活 IEntityRepository{SomeEntity} 时出错 有多个匹配的绑定可用。匹配绑定
【发布时间】:2014-10-01 15:16:18
【问题描述】:

团队, 我遇到了以下错误。

激活 IEntityRepository{SomeEntity} 时出错

有多个匹配的绑定可用。

匹配绑定:

1) 从 IEntityRepository{T} 绑定到 EntityRepository{T} 2) 从 IEntityRepository{T} 绑定到 EntityRepository{T}

激活路径:

2) 将依赖项 IEntityRepository{SomeEntity} 注入 AccountController 类型的构造函数的参数 someRepository 1) 请求 AccountController

建议: 1) 确保您只为 IEntityRepository{SomeEntity} 定义了一次绑定。

我的 NInjectDependencyResolver 如下。

 public class NInjectDependencyResolver : NInjectScope, {
    private readonly IKernel m_Kernel;
    public NInjectDependencyResolver(IKernel kernel) : base(kernel)
    {
        m_Kernel = kernel;

        // Configure by convention
        m_Kernel.Bind(x => x.FromAssembliesMatching("Id2.*.dll").SelectAllClasses().BindAllInterfaces());

     // I tried even the following explicit binding. But exactly same error. // m_Kernel.Bind(typeof(IEntityRepository<>)).To(typeof(EntityRepository<>)).InSingletonScope();

    }

    public IDependencyScope BeginScope()
    {
        return new NInjectDependencyResolver(m_Kernel);
    }
}


public class NInjectScope : IDependencyScope
{
    protected IResolutionRoot m_ResolutionRoot;
    internal NInjectScope(IResolutionRoot kernel)
    {
        m_ResolutionRoot = kernel;
    }
    public object GetService(Type serviceType)
    {
        IRequest request = m_ResolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
        return m_ResolutionRoot.Resolve(request).SingleOrDefault();
    }
    public IEnumerable<object> GetServices(Type serviceType)
    {
        IRequest request = m_ResolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
        return m_ResolutionRoot.Resolve(request).ToList();
    }
    public void Dispose()
    {
        IDisposable disposable = (IDisposable)m_ResolutionRoot;
        if (disposable != null)
            disposable.Dispose();
        m_ResolutionRoot = null;
    }
}

【问题讨论】:

    标签: asp.net-web-api dependency-injection ninject


    【解决方案1】:

    在公共 IDependencyScope BeginScope{} 方法中,而不是

    return new NInjectDependencyResolver(m_Kernel);

    如果我使用

    return new NInjectScope(m_Kernel.BeginBlock());

    它完美地工作。

    here得到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多