종속성 주입 오류 문제 해결: 컨트롤러가 활성화될 때 서비스 해결 문제 해결
종속성 주입(DI)은 현대 소프트웨어 개발의 필수적인 부분입니다. 그러나 DI 프로세스 중에 오류가 발생할 수 있으며, 특히 컨트롤러 활성화를 위해 서비스를 성공적으로 확인할 수 없는 경우에는 더욱 그렇습니다.
오류 메시지
<code>InvalidOperationException: Unable to resolve service for type 'WebApplication1.Data.BloggerRepository' while attempting to activate 'WebApplication1.Controllers.BlogController'.</code>
이 오류는 DI 컨테이너가 컨트롤러 활성화 중에 BlogController 생성자에 삽입할 BloggerRepository 인스턴스를 생성할 수 없음을 나타냅니다.
문제 분석
근본 원인을 이해하기 위해 제공된 코드 조각을 살펴보겠습니다.
창고 인터페이스 및 구현
<code>public interface IBloggerRepository { ... } public class BloggerRepository : IBloggerRepository { ... }</code>
컨트롤러
<code>public class BlogController : Controller { private readonly IBloggerRepository _repository; public BlogController(BloggerRepository repository) // ^ // 问题在此:构造函数请求具体的类 { _repository = repository; } public IActionResult Index() { ... } }</code>
시작 구성
<code>public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddScoped<IBloggerRepository, BloggerRepository>(); }</code>
솔루션
문제는 BlogController 생성자가 구체적인 클래스 BloggerRepository를 요청한다는 것입니다. 그러나 DI 컨테이너는 IBloggerRepository 인터페이스의 인스턴스를 등록했습니다. 이 문제를 해결하려면 구체적인 클래스 대신 인터페이스를 허용하도록 컨트롤러를 업데이트해야 합니다.
<code>public BlogController(IBloggerRepository repository) // ^ // 修复:构造函数接受接口 { _repository = repository; }</code>
이렇게 변경하면 DI 컨테이너가 서비스를 성공적으로 확인하고 BloggerRepository 인스턴스를 BlogController에 삽입할 수 있습니다.
기타 참고사항
드물게 특정 개체에는 특정 등록 기술이 필요할 수 있습니다. 예를 들어 다음 오류가 발생하는 경우:
<code>Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' ...</code>
이러한 종속성은 외부 라이브러리에서 제공하는 사용자 정의 확장 방법을 사용하여 해결할 수 있습니다. 특정 등록 지침은 항상 외부 라이브러리의 설명서를 참조하세요.
위 내용은 종속성 주입 오류로 인해 ASP.NET Core 컨트롤러가 활성화되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!