我相信一定有一种简单的方法可以做到这一点,但我似乎就是想不通。
我正在使用MVCContrib网格控件来显示我正在使用的三层应用程序(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(超文本标记语言)而没有显式地在视图中使用IKernel时,我如何才能让Ninject注入正确的参数。
我不是遗漏了什么,就是把这一切都弄错了。不管怎样我都被卡住了..。有什么帮助吗?通过Ninject获取服务实例的正确方法是什么
发布于 2011-08-01 01:55:15
在我看来,对您的问题最干净的解决方案是更改您的控制器,以便它创建一个已经包含字符串形式的用户状态的模型,这样就不需要在视图中进行任何转换。我会在视图和网格模型中做尽可能少的工作。
另一种可能是将服务属性注入到您的视图中,并将其传递给网格模型。但是,正如我所提到的,您正在向您的视图引入逻辑。
https://stackoverflow.com/questions/6887242
复制相似问题