2011-07-31 11 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をBootstrappingコードに公開し、IKernel.Get()だけを公開しましたが、それを取得するのが最もクリーンな方法ではないと思います。私はコンストラクタインジェクションを使用しますが、IUserStatusServiceをコンストラクタのパラメータとして配置すると、ビューで新しいUserGridModel(Html)を明示的に使用せずにNinjectに正しいパラメータを挿入する方法がわかりませんそこにIKernel。

私は何か不足しているか、これをすべて間違って配線しています。いずれにせよ、私は立ち往生しています...どんな助け? Ninjectを通じてサービスのインスタンスを取得する適切な方法

答えて

2

私の意見では、あなたの問題を最もきれいにする方法は、ユーザー状態を文字列として含むモデルを作成して変換を行わないようにコントローラを変更することですビューに必要です。私はビューとグリッドモデルで可能な限りlittelとして行うだろう。

もう1つの可能性は、ビューにサービスを挿入してグリッドモデルに渡すことです。しかし、私がこのように述べたように、あなたはあなたの意見に論理を導入しています。

+0

ありがとうございます。私はそれを見た後、必要に応じてコントローラがこのリストをviewdata/viewmodelにドロップさせる方がはるかに意味があることに同意します。 – Peter