.net core net core 3.1简单场景中的dep inj错误,ILogger奖金问题

.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();

我很难让基本DI在我的核心3.1项目中工作。我的类有一个无参数构造函数,但是当调用我的控制器方法时,我遇到了这个错误:无法创建“NRA_Courses.Interfaces.ICourseRunner”类型的实例。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。 请注意,我甚至添加了一个空构造函数以使其显式。我忽略了什么

    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容器注入它,它将为您传递所有必要的依赖项