我确信必须有一种简单的方法来做到这一点,但我似乎无法理解它。
我正在使用 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 获取我的服务实例的正确方法是什么