我的webapi项目是否仍然依赖于数据访问层

本文关键字:依赖于 数据 访问 webapi 项目 是否 我的 | 更新日期: 2023-09-27 18:26:04

使用依赖注入时,哪个模块持有接口?

例如,如果我有一个webapi服务项目和一个数据访问层项目,这是否意味着我将IUnitOfWork、IRepository等的定义放在webapi项目中,并将实现这些接口的UnitOfWork、Repository等类放在数据访问项目中?

其次,如果我使用的是一个包含所有绑定的NinjectConfigurator类,并将其放置在我的webapi项目中,以便在启动时对其进行初始化,这难道不意味着我的webapi项目现在依赖于数据访问层,因为Bind函数必须知道数据访问层中定义的类型吗?

例如。

private void AddBindings(IKernel container) {
    container.Bind<myDbContext>().ToSelf().InRequestScope();
    container.Bind<IUnitOfWork<myDbContext>>().To<UnitOfWork<myDbContext>>();
    container.Bind<IUserRepository>().To<UserRepository>();
}

我的webapi项目是否仍然依赖于数据访问层

最佳实践是:

  1. 域层(实体、存储库和服务的接口)
  2. 数据层(存储库)
  3. IoC层(Ninject和所有模块)
  4. 表示层(Web项目)

您的绑定将在IoC层中,在您的web项目中,您只需调用模块即可。

private static void RegisterServices(IKernel kernel)
{
    kernel.Load(new DomainModules(), new DataModules(), new CrossCuttingModule(), new ServiceModules());        
}