【发布时间】: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