Asp.net mvc ASP.net MVC-如何使用温莎城堡&x27;s解析视图内对象的功能

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 _userService=newuserservice(newuserrepository())

我想从Windsor获得_userService对象,因为它已经解决了所有依赖项

我怎样才能做到这一点



我需要调用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(测试支持)。我不得不从两种邪恶中选择较小的一种,所以我选择了第二种。如有任何意见,我们将不胜感激。