首页 > 解决方案 > 使用依赖注入访问 EF 使用 HtmlHelper 静态类中的层服务

问题描述

通过服务层访问实体,如何在静态类中使用?我的示例代码是我遇到以下错误!

操作无法完成,因为 DbContext 已被释放。

示例代码:

    public static class ActionLinkPermissionHelper
{
    private static readonly IUserService _userService;
  
    static ActionLinkPermissionHelper()
    {
        _userService = DependencyResolver.Current.GetService<IUserService>();
    }
    public static bool CheckActionPermission(string controllerName, string actionName, string requestType, string controllerNamespace = null)
    {
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
           
            string username = HttpContext.Current.User.Identity.Name;
            var users = _userService.GetUser(username);

         
            // If User Is SuperAdmin, Do Nothing!
            var user = _userService.GetUser(users.UserID);
            if (user.IsSuperAdmin)
            {
                return true;
            }

            List<PermissionListItem> allPermissions = PermissionsHelper.GetAllPermissions();

            // Now Check If Permission Requires Authorization And User Has This Permission
            string currentActionFullName = controllerName + actionName;// + requestType;
            var requestedAction = allPermissions.FirstOrDefault(pr => pr.ActionFullName == currentActionFullName);
            if (requestedAction != null && (requestedAction.PermissiongRequiresAuthorization || requestedAction.PermissiongGroupRequiresAuthorization) && !requestedAction.PermissionAllowAnonymous)
            {
                List<PermissionListItem> userPermissionItems = PermissionsHelper.GetUserPermissions();

                if (!userPermissionItems.Any(upr =>
                        upr.ActionFullName == currentActionFullName
                        && upr.PermissiongGroupName == controllerName
                        && (controllerNamespace == null || upr.PermissiongGroupNamespace == controllerNamespace)))
                {
                    return false;
                }
            }
        }
        return true;
    }

}

  public static MvcHtmlString ActionLinkPermission(this HtmlHelper htmlHelper, string linkText, string actionName)
        {
            string controllerNamespace = htmlHelper.ViewContext.Controller.GetType().Namespace;
            string controllername = (string)htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
            string requestMethod = (string)htmlHelper.ViewContext.HttpContext.Request.HttpMethod;
            if (!CheckActionPermission(controllername, actionName, requestMethod, controllerNamespace))
            {
                return null;
            }
            return htmlHelper.ActionLink(linkText, actionName);
        }

标签: asp.netasp.net-mvcasp.net-coreasp.net-mvc-4

解决方案


推荐阅读