这与此处发布的问题有关。我的核心项目有以下 .
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。该项目依赖于实体框架。
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>();
假设我有一个 UI 应用程序,它将从 BAL 调用一些 API。上面用于将 IRepository 绑定到 CustomerRepository 的代码到底应该放在哪里?有没有办法通过 App.config 进行这种绑定?
如您所见,如果我将它放在 BAL 中的某个位置,那么我将不得不添加对 DAL 项目的引用,因为我使用的是在 DAL 层中定义的 CustomerRepository。