2016-12-06 1 views
0

이전 ASP.NET 응용 프로그램에는 웹 페이지에 필요한 모든 데이터 인 "컨텍스트"개념이있었습니다. 따라서 컨텍스트는 사이트 자체에 대한 데이터를 포함 할 수 있으며 최종 사용 내역, , 을 포함 할 수 있습니다.ASP.NET 핵심 응용 프로그램의 컨텍스트 설정 방법

요청의 수명주기가 시작되는 동안 전체 컨텍스트가 HttpModule에 의해로드되었습니다. 컨텍스트의 각 부분은 캐시 또는 현재 항목 컬렉션에서 개최되었습니다 (정보를 보유하려는 기간에 따라 다름). 페이지는 컨텍스트를 필요할 때 호출합니다.

그래서 .NET 코어에서 비슷한 점을 달성하는 최선의 방법이 궁금합니다.

우리는 최종 사용자의 데이터의 사소한 예를 취할 경우

....

내 생각은이 데이터 "는 EndUser"라는 개체에서 개최 될 수 있다고했다. 컨트롤러의 생성자는 유형 IEndUser의 인수를 가질 수있다, 우리는이 Startup.cs이의 인스턴스를 추가하는 의존성 삽입 (Dependency Injection)에 내장 사용할 수 있습니다

services.AddScoped<IEndUser, EndUser>(); 

물론 이것은 바닐라는 EndUser 객체를 추가,하지만 난 희망 "AddScoped"를 사용하고 있기 때문에 MiddleWare 클래스를 사용하여 처음부터 모든 속성을 설정할 수있었습니다. 그러면 컨트롤러의 생성자가 MiddleWare가 방금 채운 인스턴스와 동일한 인스턴스를 받게 될 것입니다. 그러나, 나는 곧 이것이 서로 다른 목표 (오히려 분명히 뒤늦은 지경에 있음)이며 이것이 잘못된 접근이라는 것을 깨달았다.

그래서 올바른 접근 방법은 무엇입니까? 마음에 다음과 같은 곰 : 이전 HttpModule을 가진

  • 을 하나합니다 (는 EndUser 객체 유사한 개념) 사이트 객체 (DB에서 데이터를로드)을로드하고 HttpModule의 검사에서 수있는 경우 site.OnMaintenance 속성 이 경우 현재 요청과 관계없이 실행이 요청 된 컨트롤러에 들어가기 전에 해당 페이지로 리디렉션을 수행합니다.

그래서 내가 좋아하는 것, 요약 :

  1. 내 미들웨어 클래스를 생성하고
  2. 내 미들웨어 해당 클래스의 속성에 대한 테스트를 수행하기 위해 (데이터베이스에서) 속성을 채 웁니다 잠재적으로 리디렉션을 수행합니다.
  3. 리디렉션이 없으면 해당 인스턴스를 내 컨트롤러의 생성자에 삽입하십시오.

답변

1

알아두면 알 수 있듯이 ASP.NET Core의 아키텍처는 다릅니다. 컨텍스트 개체 ("god 개체"에 접근 함) 상태가 ASP.NET에서 일반적 이었지만 ASP.NET 코어에서 올바른 방법이 아닙니다. 응용 프로그램이 어떻게 구성되어 있는지에 대해 잘 모른 채

, 나는 다음과 같은 제안 것 :

  1. 는 DI 컨테이너에 추가됩니다 MaintenanceNoticeService을 만듭니다. 이 서비스는 OnMaintenance 플래그에 대해 데이터베이스를 확인하는 데 필요한 모든 논리를 캡슐화합니다.

  2. 사이트의 상태를 확인하기 위해 서비스를 사용하는 파이프 라인에서 MVC 위에있는 간단한 미들웨어를 만듭니다. 필요한 경우 여기로 리디렉션 할 수 있습니다.

  3. 사용자 데이터 액세스와 같은 서비스를 만듭니다. 필요한 경우 컨트롤러에 주입 할 수 있습니다.

목표는 작은 논리적 부분으로 나누는 것입니다. Context 객체가 사이트 유지 보수를 처리하고 컨트롤러에 주입되어 사용자 데이터를 제공하는 문제가 혼합되어 있습니다.

관련 문제