【问题标题】:Ninject and MVCContrib GridModelsNinject 和 MVCContrib 网格模型
【发布时间】:2011-07-31 02:48:36
【问题描述】:

我确信必须有一个简单的方法来做到这一点,但我似乎无法理解它。

我正在使用 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]);
    }
}

现在我需要将服务注入此模型,以便它可以从服务 (BLL) 级别提取所有适用的状态。目前只是为了确保这能正常工作,我在引导代码中公开了 IKernel 并且只是 IKernel.Get() 但我认为这不是获取它的最干净的方法。我会使用构造函数注入,但是如果我将 IUserStatusService 作为参数放入构造函数中,我无法弄清楚当我在视图中调用 new UserGridModel(Html) 时如何让 Ninject 注入正确的参数而不显式使用IKernel 在那里。

我要么遗漏了一些东西,要么把这一切都弄错了。无论哪种方式,我都被困住了......有什么帮助吗?通过 Ninject 获取我的服务实例的正确方法是什么

【问题讨论】:

    标签: asp.net-mvc-3 ninject mvccontrib-grid


    【解决方案1】:

    在我看来,对您的问题最干净的解决方案是更改您的控制器,以便它创建一个模型,该模型已经包含用户状态作为字符串,因此视图中不需要转换。我会在视图和网格模型中做尽可能少的事情。

    另一种可能性是将服务属性注入到您的视图中,然后将其传递给网格模型。但正如我提到的那样,您正在将逻辑引入您的视图。

    【讨论】:

    • 谢谢雷莫。我同意,在查看之后,让我的控制器在需要时将此列表放入 viewdata/viewmodel 会更有意义。
    猜你喜欢
    • 2011-02-22
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2011-02-23
    • 2011-05-21
    相关资源
    最近更新 更多