我是 ASP.NET 的新手,刚刚开始了解依赖注入,所以很可能我的错误是显而易见的,但我仍然不明白到底出了什么问题。我的项目中有一个类StartCommand
使用一些接口实现IUserService
。当我尝试 get 时UserService
,我收到一条错误消息,指出该服务未注册,尽管我似乎已注册它。
Program.cs
:
builder.Services.AddDbContext<DataContext>(opt => opt.UseSqlite(connectionString), ServiceLifetime.Singleton);
builder.Services.AddTransient<IUserService, UserService>();
builder.Services.AddTransient<ICommand, StartCommand>();
StartCommand
:
private readonly IUserService userService;
public StartCommand(IServiceProvider serviceProvider)
{
userService = serviceProvider.GetRequiredService<UserService>(); <- Ошибка возникает тут
}
...
IUserService
:
Task<AppUser?> GetUserAsync(Update update);
Task<bool> DeliteUserAsync(Update update);
Task<RegistratingStatus> RegistratingUserAsync(Update update);
UserService
:
private readonly DataContext database;
public UserService(DataContext data)
{
database = data;
}
...
用户 EvgeniyZ 在评论中提出了一个可行的解决方案,该问题已关闭。
UserService
你加的时候问.AddTransient<IUserService, UserService>();
,就是IUserService
。换句话说,您必须请求一个接口,或者注册一个没有接口的类类型。嗯,是的,public StartCommand(IServiceProvider serviceProvider)
您不需要这样做,立即询问正确的类型 (public StartCommand(IUserService userService)
)。