2009-06-17 4 views
1

IoC에서 뷰의 종속성을 해결할 수있는 좋은 방법이 있습니까? 캐슬 윈저를 기반으로하는 IoC 결정자가 있습니다. IResourceService이 있는데 일부 문자열을 해결하기 위해 내 의견에 액세스하고 싶습니다.IoC 및 ASP.NET MVC보기

+0

는, 당신은 어떻게 당신의 서비스를 호출하는 구상 않습니다 보기 자체를 볼 수 있습니다. 그 점에서 당신의 목표는 무엇입니까? 견본보기는 어떻게 보입니까? 어쩌면 실제로 뷰에 자동 종속성 주입을하지 않고도 목표를 달성 할 수있는 다른 방법을 찾을 수 있습니다. – NerdFury

답변

1

나는 그 내 내 종속성을 해결 extention이 방법 갈 것이다 : 내보기에서

public static class LocalizationExtentions 
{ 
    public static string Localize(this HtmlHelper html, string resource) 
    { 
    var localize = IoC.Resolve<ILocalize>(); 
    return localize.For(resource); 
    } 
} 

: 하루의 끝에서

<h1><%= Html.Localize("MainTitle") %></h1> 
0

컨트롤러에서 해결 한 다음 ViewModel에 넣어 해결 된 인스턴스에 액세스 할 수 있습니까?

+0

아니요, 중복 코드가 많이 추가됩니다. IResourceService를 사용하여 지역화 된 문자열을로드하려고합니다. –

+0

AutoMapper를 사용해 보시고 의존도를 전달할 수있는 사용자 정의보기 모델을 만드십시오. AutoMapper는 많은 중복 코드를 제거합니다. –

0

저는 Winsor를 사용하지 않지만 코드 숨김이 포함 된보기를 사용할 때 setter 주입이 가능하다고 생각합니다. 왜 뷰에 대한 종속성을 해결 하시겠습니까? 그것은 이상한 일처럼 들립니다.

0

래퍼를 사용할 수 있습니까? 래퍼 내부에서 직접 Windsor에 서비스를 요청하십시오. 그런 다음 모든 것을 확인 된 서비스로 전달하는 ResourceHelper 클래스를 사용하십시오. 보기의 HtmlHelper 클래스처럼 ResourceHelper 클래스를 사용할 수 있습니다.

+0

나는 이미 이것을 가지고있다. –

0

원본을 다운로드하고 기꺼이 수정하고 사용 하시겠습니까? 그렇다면 웹 폼 뷰 엔진에 대한 약간의 변경을 통해 할 수 있으므로 빌드 관리자가 컴파일 된 페이지 개체를 만든 후에 속성 주입을 할 수 있습니다.

그렇지 않으면 기본 컨트롤러를 만들고 동작 실행 방법을 무시하고 뷰 데이터에 삽입하지 않는 한 추해집니다. 편집

http://aspnet.codeplex.com/sourcecontrol/changeset/view/23011?projectName=aspnet#266535


는 viewInstance 당신의 널 (null) 검사는 재산 주입을 위해 서비스 로케이터를 요청할 수있는 권리 후, 페이지 인스턴스를 생성 처리하는 파일입니다.