2011-07-31 64 views
1

我相信必須有一個簡單的方法來做到這一點,但我似乎不能讓我的頭腦。Ninject和MVCContrib GridModels

我正在使用MVCContrib網格控件在我正在處理的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]); 
    } 
} 

現在我需要在該模型中注入服務,以便從服務(BLL)級別獲取所有適用的狀態。目前只是爲了確保它能夠工作,我在Bootstrapping代碼中公開了IKernel,並且只是公開了IKernel.Get(),但我認爲這並不是最簡單的方法。我會使用構造函數注入,但如果我把IUserStatusService作爲參數放在構造函數中,我無法弄清楚當我在視圖中調用新的UserGridModel(Html)時如何讓Ninject注入正確的參數,而不顯式使用IKernel在那裏。

我要麼錯過了一些東西,要麼接線錯誤。無論哪種方式,我卡住了...有什麼幫助?通過Ninject獲得我的服務實例的正確方法

回答

2

在我看來,對您的問題最乾淨的解決方案是更改您的控制器,以便它創建一個已經包含用戶狀態爲字符串的模型,以便不進行任何轉換在視圖中是必需的。我會盡可能在視圖和網格模型中儘可能地做到這一點。

另一種可能性是將服務注入到您的視圖並將其傳遞給網格模型。但正如我提到的那樣,你正在向你的觀點介紹邏輯。

+0

謝謝雷莫。我同意,在看完它之後,讓我的控制器在需要時將此列表放入viewdata/viewmodel會更有意義。 – Peter