Asp.net mvc ASP.net MVC-如何使用温莎城堡&x27;s解析视图内对象的功能
我有一个要求,我需要从我的视野内打电话给我的服务。我需要调用的服务与我的存储库有依赖关系 因此,与其像这样做- IUserService _userService=newuserservice(newuserrepository()) 我想从Windsor获得_userService对象,因为它已经解决了所有依赖项 我怎样才能做到这一点Asp.net mvc ASP.net MVC-如何使用温莎城堡&x27;s解析视图内对象的功能,asp.net-mvc,castle-windsor,Asp.net Mvc,Castle Windsor,我有一个要求,我需要从我的视野内打电话给我的服务。我需要调用的服务与我的存储库有依赖关系 因此,与其像这样做- IUserService _userService=newuserservice(newuserrepository()) 我想从Windsor获得_userService对象,因为它已经解决了所有依赖项 我怎样才能做到这一点 我需要调用IUserService的视图是共享文件夹中的_layout.cshtml。没有特定于此的控制器。那么我应该从哪里注入依赖性呢 我在视图中需要的功能
我需要调用IUserService的视图是共享文件夹中的_layout.cshtml。没有特定于此的控制器。那么我应该从哪里注入依赖性呢 我在视图中需要的功能是检查我通过UserService实现的基于角色的访问。我有两个选择- 1.在我的视图中使用COntext.User.IsInRole(这不是一段可测试的代码) 2.或者从视图调用my UserService(测试支持)。 我不得不从两种邪恶中选择较小的一种,所以我选择了第二种
非常感谢您的任何意见。您要求提供意见。在我看来,您不应该从视图中调用存储库 我可以想出两个更好的选择 选项1 将用户角色放入ViewModel中,然后将其传递给视图。然后在ViewModel中查询角色 选项2 在AccountController上调用ChildAction并返回部分视图。 大概是这样的: 在你看来:
Html.Action("GetUserRoles", "Account");
在控制器中:
[ChildActionOnly]
[Transaction]
public PartialViewResult GetUserRoles(string userId)
{
var viewModel = userService.GetRolesForUser(userId);
return PartialView(viewModel);
}
现在,您可以通过控制器构造函数注入IUserService。
从简单的迭代和类似的东西来看,视图不应该包含任何代码,尤其是数据访问代码。这就是MVC模式的全部前提。我需要调用IUserService的视图是共享文件夹中的_layout.cshtml。没有特定于此的控制器。那么我应该从哪里注入依赖性呢?我在视图中需要的功能是检查我通过UserService实现的基于角色的访问。我有两个选择-1。或者在我的视图中使用COntext.User.IsInRole(这不是一段可测试的代码)2。或者从视图调用my UserService(测试支持)。我不得不从两种邪恶中选择较小的一种,所以我选择了第二种。如有任何意见,我们将不胜感激。