これは、ここに投稿された質問に関連しています。私のコアプロジェクトには次のものがあります。
public interface IRepository<T> : IDisposable
{
IQueryable<T> All { get; }
IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
TEntity Find(int id);
void InsertOrUpdate(T entity);
void Delete(int id);
void Save();
}
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
DAL には CustomerContext と CustomerRepository があります。このプロジェクトは Entity Framework に依存しています。
public class CustomerContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
public class CustomerRepository : IRepository<Customer>
{
}
次は私のBALです。これはクラス ライブラリ プロジェクトです。顧客リポジトリでいくつかのアクションを実行する必要がありますが、DAL への依存関係を直接追加せずに実行したいと考えています。ninjectを使用してDI経由でやろうとしています。IRepository と CustomerRepository の間のバインディングを次のように設定しています。
var Kernel = new StandardKernel();
Kernel.Bind<IRepository>().To<CustomerRepository>();
BAL から何らかの API を呼び出す UI アプリケーションがあるとします。IRepository を CustomerRepository にバインドするための上記のコードは、どこに配置する必要がありますか? App.config を介してこのバインドを行う方法はありますか?
これを BAL のどこかに置くとわかるように、DAL レイヤーで定義されている CustomerRepository を使用しているため、DAL プロジェクトへの参照を追加する必要があります。