Asp.net core .Net核心WebApi依赖项注入

Asp.net core .Net核心WebApi依赖项注入,asp.net-core,dependency-injection,asp.net-core-webapi,Asp.net Core,Dependency Injection,Asp.net Core Webapi,我有一个解决方案,我有不同的项目。 其中一个是api项目,我想在此项目中使用依赖项注入,但我得到以下错误: 有些服务无法构建(验证服务描述符“ServiceType:CCM.Business.Abstract.ICompanyService Lifetime:作用域实现类型:CCM.Business.Concrete.CompanyManager”时出错:在尝试激活“CCM.Business.Concrete.CompanyManager”时无法解析类型“CCM.DataAccess.Concr

我有一个解决方案,我有不同的项目。 其中一个是api项目,我想在此项目中使用依赖项注入,但我得到以下错误:

有些服务无法构建(验证服务描述符“ServiceType:CCM.Business.Abstract.ICompanyService Lifetime:作用域实现类型:CCM.Business.Concrete.CompanyManager”时出错:在尝试激活“CCM.Business.Concrete.CompanyManager”时无法解析类型“CCM.DataAccess.Concrete.CompanyDal”的服务。)

Startup.cs:

        public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();

        services.AddScoped<ICompanyDal, CompanyDal>();

        services.AddScoped<ICompanyService, CompanyManager>();
        
        
    }
public void配置服务(IServiceCollection服务)
{
services.AddControllers();
services.addScope();
services.addScope();
}
我公司:

    public interface ICompanyDal: IGenericDal<Company>
{
}
    public class CompanyDal:GenericDal<Company,CCMContext>,ICompanyDal
{
}
公共接口ICompanyDal:IGenericDal
{
}
公司名称:

    public interface ICompanyDal: IGenericDal<Company>
{
}
    public class CompanyDal:GenericDal<Company,CCMContext>,ICompanyDal
{
}
public class CompanyDal:GenericDal、ICompanyDal
{
}
i公司服务:

    public interface ICompanyService
{
    Company GetById(int id);
    List<Company> GetAll();
    void Create(Company entity);
    void Update(Company entity);
    void Delete(Company entity);
}
公共接口ICompanyService
{
公司GetById(intid);
List GetAll();
无效创建(公司实体);
无效更新(公司实体);
作废删除(公司实体);
}
公司经理:

public class CompanyManager : ICompanyService
{
    private CompanyDal _companyDal;
    public CompanyManager(CompanyDal companyDal)
    {
        _companyDal = companyDal;
    }

    public void Create(Company entity)
    {
        _companyDal.Create(entity);
    }

    public void Delete(Company entity)
    {
        _companyDal.Delete(entity);
    }

    public List<Company> GetAll()
    {
        return _companyDal.GetAll();
    }

    public Company GetById(int id)
    {
        return _companyDal.GetById(id);
    }

    public void Update(Company entity)
    {
        _companyDal.Update(entity);
    }
}
公共类公司管理者:ICompanyService
{
私人公司;
上市公司管理人(CompanyDal CompanyDal)
{
_companyDal=companyDal;
}
公共作废创建(公司实体)
{
_公司创建(实体);
}
公共作废删除(公司实体)
{
_公司数据删除(实体);
}
公共列表GetAll()
{
return _companyDal.GetAll();
}
上市公司GetById(内部id)
{
返回_companyDal.GetById(id);
}
公共作废更新(公司实体)
{
_公司数据更新(实体);
}
}

还有什么我需要传递给您的吗?请帮助。

公司管理器更改为显式依赖于注册的抽象

公司经理:

public class CompanyManager : ICompanyService
{
    private CompanyDal _companyDal;
    public CompanyManager(CompanyDal companyDal)
    {
        _companyDal = companyDal;
    }

    public void Create(Company entity)
    {
        _companyDal.Create(entity);
    }

    public void Delete(Company entity)
    {
        _companyDal.Delete(entity);
    }

    public List<Company> GetAll()
    {
        return _companyDal.GetAll();
    }

    public Company GetById(int id)
    {
        return _companyDal.GetById(id);
    }

    public void Update(Company entity)
    {
        _companyDal.Update(entity);
    }
}
因为这是在容器中注册的

启动:


在启动时,您使用实现
CompanyDal
添加服务
ICompanyDal
。但在
CompanyManager
中,您注入的是实现
CompanyDal
,而不是服务
ICompanyDal

解决方案,将服务注入构造函数:

公共类公司管理者:ICompanyService
{
私人公司;
上市公司管理人(I公司级公司)
{
_companyDal=companyDal;
}
...