0

我无法摆脱来自 Ninject 的异常“几个构造函数具有相同的优先级”

我有存储库

public interface IRepository<TEntity> where TEntity : class
{
    List<TEntity> FetchAll();
    IQueryable<TEntity> Query { get; }
    void Add(TEntity entity);
    void Delete(TEntity entity);
    void Save();
}


public class Repository<T> : IRepository<T> where T : class
{
    private readonly DataContext _db;

    public Repository(DataContext db)
    {
        _db = db;
    }

    #region IRepository<T> Members

    public IQueryable<T> Query
    {
        get { return _db.GetTable<T>(); }
    }

    public List<T> FetchAll()
    {
        return Query.ToList();
    }

    public void Add(T entity)
    {
        _db.GetTable<T>().InsertOnSubmit(entity);
    }

    public void Delete(T entity)
    {
        _db.GetTable<T>().DeleteOnSubmit(entity);
    }

    public void Save()
    {
        _db.SubmitChanges();
    }

    #endregion
}

我试图绑定存储库的控制器

    public class AdminController : Controller
    {
        private readonly IRepository<Store> _storeRepository;

 public AdminController(IRepository<Store> storeRepository)
        {
            _storeRepository = storeRepository;
        }

}

Ninject 引导程序

       private static void RegisterServices(IKernel kernel)
{
    var connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    kernel.Bind(typeof (DataContext)).ToMethod(context => new DataContext(connectionString));
    kernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>));
}    

运行应用程序后出现错误

Error activating DataContext using implicit self-binding of DataContext
Several constructors have the same priority. Please specify the constructor using ToConstructor syntax or add an Inject attribute.

Constructors:
DataContext(string fileOrServerOrConnectionMappingSource mapping)
DataContext(IDbConnection connectionMappingSource mapping)

似乎 Ninject 试图绑定到 DataContext 类构造函数

namespace System.Data.Linq: IDisposable
{
    public class DataContext : IDisposable
    {
        public DataContext(IDbConnection connection);
        public DataContext(string fileOrServerOrConnection);

//skip code


}

但我想绑定到我的存储库构造函数

  public class Repository<T> : IRepository<T> where T : class
    {
        private readonly DataContext _db;

        public Repository(DataContext db)
        {
            _db = db;
        }
//skip code
}

此外,如果我删除表单引导程序下方的行,我仍然会遇到相同的异常。当我尝试绑定存储库时,似乎 Ninject 会自动尝试绑定依赖项。

    kernel.Bind(typeof (DataContext)).ToMethod(context => new DataContext(connectionString));
4

0 回答 0