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