2014-12-30 2 views
0

autofac과 MVC를 함께 사용하면 뷰 모델을 자동으로 확인할 수 있습니다. 비록 그것이 해결 된 후에 모든보기 모델에 대해 Initializable 메서드를 호출해야하는 문제가 있지만 이것은 잘 작동합니다.간단한 ctor 후 MVC 매개 변수를 바인딩 한 후 초기화 호출

나는이 문제를 Autofac 내에서 OnActivated 메소드에 연결하는 것으로 해결했습니다.

유일한 문제는 MVC가 해당 매개 변수를 뷰 모델 내의 속성에 바인딩하기 전에 Initialize 메서드가 호출되어 부분 초기화가 발생한다는 것입니다.

MVS 바인딩 외부에 뷰 모델을 만들면 초기화를 호출하지 않아도되지만 사용자 정의 ModelBinder의 내 OnModelUpdated 재정의에서 초기화 (Autofac에서 제거)를 초기화하여이 문제를 해결할 수 있습니다.

내가 볼 수있는 유일한 해결책은 Autofac (OnActivated)과 내 모델 바인더 (OnModelUpdated)의 두 곳에서 모두 사용할 수 있다는 것입니다. 이것은 엄청난 성능을 발휘할 것입니다.

답변

0

내가 언급 할 담당자 지점이 충분하지 않아서 GET 및/또는 POST에서 초기화를 호출해야하는지, 두 가지 모두 이유가 무엇인지 궁금한 점이 있습니다. 일반적으로 GET을위한 초기화가 있습니다. 왜냐하면 우리가 일부 속성을 미리 채우는 것을 의미하기 때문입니다. POST에는 정보가 제공되는 반면에 어떤 작업을 수행 할 가능성이 큽니다. 내가 생각 하는데요

두 솔루션 :

1) 간단한 일을 유지하고 액션 메소드에서 초기화 메서드를 호출합니다. 위에서 언급했듯이 POST를위한 것이 아니라 GET 요청에 대해이 작업을 수행합니다.하지만 사용자의 필요에 따라 둘 다 할 수없는 이유는 없습니다.

2) Autofac을 사용하고 있으므로 사용자 정의 액션 호출자를 사용하여 Autofac에 등록 할 수 있습니다. 그러면 DI + 모델 바인딩이 동시에 제공되므로 기존 이벤트 아이디어가 효과가 있습니다. 코드는 내 질문에 here에서 찾을 수 있습니다.

+0

동작 메서드에서 Initialize를 호출하는 첫 번째 해결 방법은 단순하지만 모든 개발자가 해당 메서드를 호출해야한다는 것을 기억해야하기 때문에 실용적이지 않습니다. – Ruskin

+0

MVC 모델 바인딩을 재정의하고 싶지는 않지만 두 번째 솔루션은 물을 보유 할 수도 있습니다. Initialize 메서드가 호출되기 전에 발생하는지 확인하고 싶습니다. – Ruskin

+0

그것은 잘하면 귀하의 요구에 적합 작동합니다. 상대방의 포인트가 충분하다면 나는 당신의 질문에 투표 할 것입니다. – acarter