如何将值传递给控制器的构造函数?
How do I pass a value to a Controller's constructor?
因此,为了对我们的控制器进行单元测试,我试图精简我们的控制器并使它们更易于测试。我们使用 Service/Reposistory 模式,我们遇到的一个问题是服务层的多个实例化。控制器中的每个方法都会实例化服务层的一个新实例。为了纠正这个问题,我想在控制器的构造函数中实例化一次。
这是我们典型的 Controller 方法的示例:
public class GroupController : ControllerBase // ControllerBase is derived from System.Web.Mvc.Controller
{
public ActionResult EditGroup(int groupId)
{
EditGroupViewModel model = new EditGroupViewModel();
using (var service = new AccountServices(this.User)) // this.User is an instance of IPrincipal Controller.User {
Group group = service.GetGroupWithRoles(groupId);
// some code to map Group to EditGroupViewModel
}
return View(model);
}
}
任何使用 AccountServices 的方法都必须实例化 class 的新实例,如上所示。理想情况下,AccountServices 将在控制器的构造函数中实例化一次。但是,我不确定该怎么做。
这是我尝试过的:
private readonly AccountServices _service;
public GroupController(IPrincipal user)
{
_service = new AccountServices(user);
}
然而,当在构造函数上放置断点时,我看到 IPrinicipal 用户仍然存在 null.I 我认为我最大的障碍是 AccountServices 需要实例化 IPrincipal Controller.User。如何在构造函数中一次性实例化 AccounServices,以便控制器的所有方法都可以使用该实例?
您可以为此使用依赖注入和自定义工厂。这里有一个 site 可以帮助您入门。
因此,为了对我们的控制器进行单元测试,我试图精简我们的控制器并使它们更易于测试。我们使用 Service/Reposistory 模式,我们遇到的一个问题是服务层的多个实例化。控制器中的每个方法都会实例化服务层的一个新实例。为了纠正这个问题,我想在控制器的构造函数中实例化一次。
这是我们典型的 Controller 方法的示例:
public class GroupController : ControllerBase // ControllerBase is derived from System.Web.Mvc.Controller
{
public ActionResult EditGroup(int groupId)
{
EditGroupViewModel model = new EditGroupViewModel();
using (var service = new AccountServices(this.User)) // this.User is an instance of IPrincipal Controller.User {
Group group = service.GetGroupWithRoles(groupId);
// some code to map Group to EditGroupViewModel
}
return View(model);
}
}
任何使用 AccountServices 的方法都必须实例化 class 的新实例,如上所示。理想情况下,AccountServices 将在控制器的构造函数中实例化一次。但是,我不确定该怎么做。
这是我尝试过的:
private readonly AccountServices _service;
public GroupController(IPrincipal user)
{
_service = new AccountServices(user);
}
然而,当在构造函数上放置断点时,我看到 IPrinicipal 用户仍然存在 null.I 我认为我最大的障碍是 AccountServices 需要实例化 IPrincipal Controller.User。如何在构造函数中一次性实例化 AccounServices,以便控制器的所有方法都可以使用该实例?
您可以为此使用依赖注入和自定义工厂。这里有一个 site 可以帮助您入门。