1

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

我正在使用 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 获取我的服务实例的正确方法是什么

4

1 回答 1

2

In my opinion the cleanest solution to your problem is to change your controller so that it creates a model that already contains the user status as string so that no convertions is required in the view. I would do as littel as possible in the view and grid model.

Another possibility is to property inject the service to your view an pass it to the grid model. But as I mentioned this way you are introducing logic to your view.

于 2011-07-31T17:55:15.100 回答