尝试使用 services.AddScoped 注入时出错

Error while trying to inject with services.AddScoped

我正在构建一个 WarehouseApi,但是当我尝试注入我的服务时出现错误 (CS0119)

public static IServiceCollection AddServices(this IServiceCollection services)
        {
            services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
            services.AddScoped(IEmployeeRepository, EmployeeRepository); //CS0119
            return services;
        }

错误描述:EmployeeRepository'是一种类型,在给定的上下文中无效,并且 IEmployeeRepository' 是一种类型,在给定的上下文中无效

这里是 IEmployeeRepository 和 EmployeeRepository:

public interface IEmployeeRepository : IRepository<Employee>
    {
        Employee GetFirstOrDefaultByFirstName(string firstNameToFind);
        Employee GetFirstOrDefaultByLastName(string lastNameToFind);
        Employee GetFirstOrDefaultbByAge(int ageToFind);
        Employee GetByEmail(string emailToFind);
        Employee GetByAddress(string addressToFind);
        Employee GetByPhoneNumber(string phoneNumberToFind);
    }

public class EmployeeRepository : Repository<Employee>, IEmployeeRepository
    {
        public EmployeeRepository(WareHouseDBContext empContext) : base(empContext) { }

        public Employee GetByAddress(string addressToFind)
        {
            return context.Set<Employee>().FirstOrDefault(x => x.Address == addressToFind);
        }

        public Employee GetByEmail(string emailToFind)
        {
            return context.Set<Employee>().FirstOrDefault(x => x.Email == emailToFind);
        }

        public Employee GetByPhoneNumber(string phoneNumberToFind)
        {
            return context.Set<Employee>().FirstOrDefault(x => x.PhoneNumber == phoneNumberToFind);
        }

        public Employee GetFirstOrDefaultbByAge(int ageToFind)
        {
            return context.Set<Employee>().FirstOrDefault(x => x.Age == ageToFind);
        }

        public Employee GetFirstOrDefaultByFirstName(string firstNameToFind)
        {
            return context.Set<Employee>().FirstOrDefault(x => x.FirstName == firstNameToFind);
        }

        public Employee GetFirstOrDefaultByLastName(string lastNameToFind)
        {
            return context.Set<Employee>().FirstOrDefault(x => x.LastName == lastNameToFind);
        }
    }

我是 API、依赖注入等方面的新手,所以这可能是一个简单的修复

您需要使用接受类型参数的方法来解决编译警告:

services.AddScoped<IEmployeeRepository, EmployeeRepository>();

但是,如果您使用的不是 .NET 5.0 或更高版本,则内置 DI 容器不支持开放泛型 (IFoo<>)。

在这种情况下,您需要像这样注册它:

services.AddScoped<IRepository<Employee>, EmployeeRepository>();

.NET 5.0 提供对开放泛型的支持 (PR). There's some more information about it here.