1

これを行うには簡単な方法が必要だと確信していますが、頭を悩ませることはできないようです。

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)レベルから該当するすべてのステータスを取得できるようにする必要があります。現在、これが機能することを確認するために、ブートストラップコードでIKernelを公開し、IKernel.Get()だけを公開しましたが、これが最もクリーンな方法ではないと思います。コンストラクターインジェクションを使用しますが、コンストラクターのパラメーターとしてIUserStatusServiceを配置すると、ビューで新しいUserGridModel(Html)を明示的に使用せずに、Ninjectが正しいパラメーターをインジェクトする方法を理解できません。そこにIKernel。

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

4

1 に答える 1

2

私の意見では、問題の最もクリーンな解決策は、コントローラーを変更して、ビューで変換が不要になるように、ユーザーステータスを文字列として既に含むモデルを作成することです。ビューとグリッドモデルで可能な限り小さなことをします。

もう1つの可能性は、サービスをビューにプロパティインジェクトし、グリッドモデルに渡すことです。しかし、私がこのように述べたように、あなたはあなたの見解に論理を導入しています。

于 2011-07-31T17:55:15.100 に答える