.net core net core 3.1简单场景中的dep inj错误,ILogger奖金问题
我很难让基本DI在我的核心3.1项目中工作。我的类有一个无参数构造函数,但是当调用我的控制器方法时,我遇到了这个错误:无法创建“NRA_Courses.Interfaces.ICourseRunner”类型的实例。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。 请注意,我甚至添加了一个空构造函数以使其显式。我忽略了什么.net core net core 3.1简单场景中的dep inj错误,ILogger奖金问题,.net-core,dependency-injection,ilogger,.net Core,Dependency Injection,Ilogger,我很难让基本DI在我的核心3.1项目中工作。我的类有一个无参数构造函数,但是当调用我的控制器方法时,我遇到了这个错误:无法创建“NRA_Courses.Interfaces.ICourseRunner”类型的实例。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。 请注意,我甚至添加了一个空构造函数以使其显式。我忽略了什么 public interface ICourseRunner { void StartCourse();
public interface ICourseRunner
{
void StartCourse();
void PauseCourse();
public ICourse Course { get; set; }
public IStudent Student { get; set; }
}
// Implementing class
public class CourseRunner : ICourseRunner
{
public ICourse Course { get; set; }
public IStudent Student { get; set; }
private Timer _timer => new Timer();
private DateTime _timeStarted;
private TimeSpan _timeRunAfterPauses;
public CourseRunner()
{}
public void StartCourse()
{
// implemented
}
public void PauseCourse()
{
// implemented
}
private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
// implemented
}
}
// Method in a controller where I want ICourseRunner injected
public void StartCourseTimer(CourseList courseStarted, ICourseRunner courseRunner)
{ ...}
还有一个问题,为什么我不能将日志记录注入这样一个简单的类中?这段代码在我尝试执行“=new Student()”的行上导致编译错误,因为Student不包含接受0个参数的构造函数。我想这是另一个骗局:
public class Student : IStudent
{
...
private readonly ILogger<Student> _logger;
public Student(ILogger<Student> logger)
{
_logger = logger;
}
...
}
公共班级学生:IStudent
{
...
专用只读ILogger\u记录器;
公立学生(ILogger记录器)
{
_记录器=记录器;
}
...
}
谢谢你!我花了时间进行研究,只是因为截止日期很紧而询问。根据Asp.Net核心控制器的文档,控制器应该通过构造函数使用注入。 在您的例子中,您试图通过一个方法参数注入依赖项,这可能无法正常工作。如果您通过构造函数注入它(就像您的学生示例中那样),一切都会正常工作 回答额外问题-错误消息提供了所有必要的信息-您不能仅仅因为您的类没有实例就通过无参数构造函数创建Student实例。这里只有一个构造函数,只有一个参数“ILogger logger”。如果您想通过构造函数创建Student的实例,您应该将记录器的实例传递给它。另一种方法-通过DI容器注入它,它将为您传递所有必要的依赖项