【发布时间】:2013-05-21 20:52:25
【问题描述】:
我在 ASP.Net MVC 应用程序中使用 Ninject 进行依赖注入(这是我第一个使用 Ninject 或 DI 的项目)。
我选择使用模型-视图-视图模型模式。视图模型将提供我将绑定到实际视图的所有属性,但还需要访问数据库以获取数据列表等内容。例如:
public class CreateGetIncidentViewModel
{
private IDBContext _dbContext = null;
[Required]
public EmployeeType EmployeeType { get; set; }
[Required]
[StringLength(50)]
public string Department { get; set; }
/
public IEnumerable<SelectListItem> GetEmployeeTypeSelectList()
{
// Simplified for brevity
var employeeTypes = _dbContext.EmployeTypes.Where().... // Go select the employee types
var employeeTypeSelectList = new List<SelectListItem>();
foreach(var employeeType in employeeTypes){
employeeTypeSelectList.Add(new SelectListItem(){
// Set select list properties
});
}
return employeeTypeSelectList;
}
}
我的问题是:
- IDBContext 是 Ninject 中已注册的依赖项。通过实例化直接访问具体类型是不行的。
- 我必须以某种方式将该依赖项注入到此类中,或者以某种方式通过已解决依赖项的其他类访问该依赖项。
鉴于我的 ViewModel 经常由 ASP.Net MVC 通过模型绑定自动补充,我如何将我的依赖项添加到我的 ViewModel 中?
我经历了多种方式,但它们看起来都很脏。我可以(但不想)
- 实施服务定位器模式,只需从 ViewModel 中解决我的 IDBContext 依赖关系。
- 在我的控制器中解析 IDBContext 并在手动构建 ViewMode 时将其传递到我的 ViewModel 中,即
new CreateGetIncidentViewModel(dbContext);- 这并不能解决视图模型被 MVC 水合的问题,尽管当模型被发布到动作时
建议?
【问题讨论】:
标签: asp.net-mvc mvvm dependency-injection ninject