尝试注入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或更高版本,则IFoo<>内置DI容器不支持开放通用()。

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

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

.NET 5.0(PR提供了对开放泛型的支持这里有更多有关它的信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章