2011-07-31 6 views
1

나는이 작업을 쉽게 수행 할 수 있어야한다고 확신하지만 그저 내 머리를 감싸는 것처럼 보인다.Ninject 및 MVCContrib GridModels

MVCContrib Grid 컨트롤을 사용하여 작업중인 3 계층 응용 프로그램에서 여러 개의 격자를 표시합니다 (ASP.NET MVC3 PL -> BLL -> DAL). 또한 Ninject를 사용하여 모든 종속성을 자동으로 주입합니다.

오전 데 문제는이 같은 내 뷰에서 그리드 표시 그리드 모델을 사용하고 있다는 것입니다 : 정의 된 해당 그리드 모델

@Html.Grid(Model).WithModel(new UserGridModel(Html)).Attributes(id => tableName) 

을하고 있습니다 지금

public class UserGridModel : GridModel<User> { 

    public UserGridModel(HtmlHelper html) 
    { 
     Dictionary<int, string> userStatuses = /*TODO: GET ALL USER STATUSES*/;    

     Column.For(user => user.ID); 
     Column.For(user => html.ActionLink(user.Email, "Edit", new {id = user.ID})).Named(DtoResources.UserDto_Email); 
     Column.For(user => user.FirstName); 
     Column.For(user => user.LastName); 
     Column.For(user => userStatuses[user.StatusID]); 
    } 
} 

를 I 서비스 (BLL) 레벨에서 모든 해당 상태를 가져올 수 있도록이 모델에 서비스를 주입해야합니다. 현재 이것이 제대로 작동하는지 확인하기 위해 부트 스트래핑 코드에 IKernel을 노출 시켰고 IKernel.Get()을 사용했지만 가장 깨끗한 방법이라고 생각하지 않습니다. 나는 생성자 삽입을 사용할 것입니다. 그러나 IUserStatusService를 생성자의 매개 변수로 넣으면 명시 적으로 사용하지 않고 뷰에서 새 UserGridModel (Html)을 호출 할 때 Ninject에 올바른 매개 변수를 주입하는 방법을 알 수 없습니다. 거기에 IKernel.

무언가를 놓치거나 잘못 배선하고 있습니다. 어느 쪽이든 나는 붙어있어 ... 어떤 도움? Ninject를 통해 내 서비스의 인스턴스를 얻는 적절한 방법은 무엇입니까

답변

2

내 의견으로는 문제에 대한 가장 깨끗한 해결책은 변환을하지 못하도록 이미 사용자 상태를 문자열로 포함하고있는 모델을 생성하도록 컨트롤러를 변경하는 것입니다 보기에 필요합니다. 뷰와 그리드 모델에서 가능한 한 littel로 할 것입니다.

또 다른 가능성은 뷰에 서비스를 삽입하여 그리드 모델에 전달하는 것입니다. 그러나 내가 언급 한대로 당신은 당신의 견해에 논리를 소개하고 있습니다.

+0

Thanks Remo. 나는 그것을보고 나서 필자의 컨트롤러가 필요할 때이 목록을 viewdata/viewmodel에 놓는 것이 훨씬 더 합리적이라는 데 동의한다. – Peter