답변

2

우선, constructors should be simple. 각 요청에서 컨트롤러를 작성하면 애플리케이션 속도가 느려지므로 생성자가 너무 많은 작업을하고 있다는 신호입니다. MVC 프레임 워크는 요청 당 하나의 인스턴스를 생성하므로 어쨌든 MvcSiteMapProvider 이상으로 느려질 수 있습니다.

즉, 다른 옵션이 있습니다. roles 속성/Roles 속성을 사용하여 AuthorizeAttribute에서와 동일한 역할을 설정할 수 있습니다. 이 작업의 단점은 다음과 같습니다.

  1. 전체 보안 체계를 복제해야합니다.
  2. 사용자 정의 AuthorizeAttribute를 사용할 수 없습니다.

리플렉션을 사용하여 응용 프로그램을 검색하는 동적 노드 공급자를 만들어서 첫 번째 제한을 해결하고 해당 노드의 역할로 AuthorizeAttribute에서 역할을 설정할 수 있습니다. 이 코드는 캐시 타임 아웃마다 한 번만 실행되므로 그 시점에서 일부 Reflection을 사용하면 성능 문제가 발생하지 않을 가능성이 높습니다.

+1

> MVC 프레임 워크는 요청마다 하나의 생성자 인스턴스를 만듭니다. 요청 당 하나의 인스턴스가 요청 당 컨트롤러 당 하나의 인스턴스와 같지 않지만, 귀하의 요지를 이해합니다. 내 생성자를 간단하게 만드는 것이 나의 첫 걸음이었습니다. – Leotsarev

+1

참. 하지만 안타깝게도 마이크로 소프트는 현재 요청이 아닌 보안 점검을 위해'AuthorizeAttribute'를 사용하고자하는 사람들을위한 선견지명이 없습니다. 당신은 선택의 여지가 있지만'ControllerContext' 객체를 조롱합니다 * 요청 일 것입니다. 컨트롤러 인스턴스가 필요합니다 (또는 앞에서 말한 것처럼 전체 보안 체계를 복제하십시오). – NightOwl888

관련 문제