2010-05-28 2 views
0

가 난 그냥에서 사용자 정의 후크를 할 수있을 것입니다 필요가있는 무엇 MVC 2

와 ASP.net 4.0에서 새 프로젝트를 시작했습니다 컨트롤러의 각 동작의 시작과 끝.

public void Index() { 
    *** call to the start custom hook to externalfile.cs (is empty so does nothing) 

    ViewData["welcomeMessage"] = "Hello World"; 

    *** call to the end custom hook to externalfile.cs (changes "Hello World!" to "Hi World") 

    return View(); 
} 

보기 다음 사용자 정의 후크에서 변경된 후 welcomeMessage가 "Hi World"로 표시됩니다.

사용자 지정 후크는 외부 파일에 있어야하며 "핵심"컴파일 된 코드는 변경하지 않아야합니다. 내 제한된 지식으로 인해이 문제가 발생합니다. ASP.net MVC를 컴파일해야합니다.

누구에게 어떻게 달성 할 수있는 조언이 있습니까?

감사합니다.

답변

3

ActionFilterAttribute을 기반으로 자신 만의 클래스를 만듭니다. 다음과 같은 고리가 있습니다.

  1. OnActionExecuting
  2. 예 OnResultExecuting

,

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var controller = filterContext.Controller; 

     controller.ViewData["welcomeMessage"] = "Hi World!"; 
     controller.TempData["Access_My_TempData"] = "Some Value"; 

     base.OnActionExecuted(filterContext); 
    } 
} 

또한 동작 방법 실적 [동작]의 종류를 확인할 수 OnResultExecuted OnActionExecuted .

if ((filterContext.Result is RedirectResult) || (filterContext.Result is RedirectToRouteResult)) 
{ 
    // do something only if we are redirecting to a different action 
} 
else if (filterContext.Result is ViewResult) 
{ 
    // this is just a normal View action 
} 

오 속성을 사용하는 방법을 표시하는 것을 잊어 버렸습니다.
당신은 당신의 행동 방식 위에 장식합니다.

[MyFilterAttribute] 
public ActionResult MyActionMethod() 
{ 
    return View(); 
} 
+0

모든 작업에 속성을 수동으로 넣지 않으려면 공통 기본 컨트롤러 유형을 만들어 유형 자체에 속성을 추가 할 수 있다고 생각합니다. – Ryan

+0

이것은 내가하고 싶은 일과 같이 보입니다. 감사합니다. – Adrian

1

스크립트 코드를 동적으로 호출 할 수있는 이벤트 기반 플러그인 시스템입니다. 그래서 (예를 들어) 컨트롤러를 통해 이벤트가 발생할 때 호출되는 철 파이썬 스크립트를 만듭니다.

철분 파이썬 일 필요는 없지만 내가 볼 수있는 가장 의미가 있습니다.

+0

MVC가 아니어도이 작업을 수행했습니다. 잘 작동합니다. –

0

OnActionExecuting/OnActionExecuted를 재정의하고 MEF (가져 오기, 다른 어셈블리 코드 내보내기)를 사용하는 것은 어떻습니까?

+0

이 개념이 ActionFilter로서 MVC 프레임 워크에 이미있는 경우 MEF를 사용해야하는 이유는 무엇입니까? – Ryan

+0

액션 필터에서 동적 주입 코드가 실행 된 것으로 생각했기 때문입니다. – takepara