이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 20665|회답: 0

[.NET 코어] ASP.NET 코어는 Autofac 속성을 사용하여 NullReferenceException을 주입합니다

[링크 복사]
2020-9-12 20:57:21에 게시됨 | | | |
Autofac은 정말 훌륭합니다. NET IoC 컨테이너. 클래스 간 의존성을 관리하여 규모와 복잡성이 증가해도 애플리케이션을 쉽게 수정할 수 있도록 합니다. 일반 .NET 클래스를 컴포넌트로 처리하여 구현됩니다.
저는 또한 Autofac 컨테이너에 대해 진부한 표현을 가지고 있으며, 많은 글을 썼습니다:

MVC에서 autofac을 사용해 자동 등록을 구현하세요
https://www.itsvse.com/thread-8993-1-1.html

Autofac "순환 부품 의존성 감지" 오류 해결
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core는 Autofac을 사용해 IOC 주입을 구현합니다
https://www.itsvse.com/thread-7563-1-1.html

autofac 컴포넌트의 인스턴스 범위
https://www.itsvse.com/thread-5080-1-1.html

mvc 컨트롤러 Autofac 속성이 컨트롤러에 주입됨
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET 코어 의존성 주입은 포함된 IOC 컨테이너를 사용합니다
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core는 Autofac을 사용해 IOC 주입을 구현합니다
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core는 Autofac을 사용해 AOP 감각을 구현합니다
https://www.itsvse.com/thread-7566-1-1.html


Core 3.1 ASP.NET 새 프로젝트를 만들고 nuget을 통해 autofac 관련 패키지를 참조하세요.


새로운 ITest 인터페이스와 구현을 만들자. 코드는 다음과 같다:




새로운 BaseController 기본 클래스 컨트롤러를 만들면, 다른 컨트롤러들이 추상 클래스를 상속하고, 기본 클래스에 ITest 속성을 추가하면 코드는 다음과 같습니다:

WeatherForecastController가 BaseController 추상 클래스에서 상속받아 다음 테스트 방법을 추가합니다:

Startup 클래스의 ConfigureContainer 메서드는 인터페이스를 등록하고 컨트롤러 속성 입력을 설정합니다. 코드는 다음과 같습니다:

방문해 보세요:하이퍼링크 로그인이 보입니다.

NullReferenceException 예외는 빈칸 메시지에 인용되어 있으며, 다음 그림에서 확인할 수 있습니다:



NullReferenceException: Object reference not set to an instance of an object.


고개생성자는 ITest 인터페이스에 주입되고, 그 메서드가 호출되며, 테스트가 통과되면 정상적으로 호출할 수 있습니다

이상 현상의 원인

컨트롤러의 구현은 더 특별하며, 컨트롤러는 기본적으로 자체 컨테이너를 통해 Resolve&Activate를 하지 않고 MVC가 직접 관리하지만, Microsoft는 다음과 같은 방법을 제공합니다:

AddControllersAsServices() 메서드를 호출하면 컨트롤러가 자체 컨테이너를 사용하도록 설정할 수 있으며, 이 메서드의 주요 소스 코드는 다음과 같습니다:



기본 시작 객체의 ConfigureServices 메서드는 다음과 같이 구성됩니다:

우리는 이를 다음과 같이 수정합니다:

또는:

ServiceBasedControllerActivator 소스 코드는 다음과 같습니다:

설정이 완료되면 DI 컨테이너에서 직접 컨트롤러를 불러오면, 컨트롤러가 Autofac 서비스의 데이터를 파싱하고, 설정한 속성 주입이 적용됩니다. 아래에 나와 있습니다:



마지막으로, asp.net 코어의 소스 코드 주소가 첨부되어 있습니다:

하이퍼링크 로그인이 보입니다.

(끝)





이전의:Hangfire는 정상적으로 데이터를 추가하지만, 예외 때문에 계속 실행됩니다
다음:E4A를 사용해 고급 테이블에 Sqlite 데이터를 어떻게 표시하나요?
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com