在存储库模式中使用[Authorize]的正确方法

时间:2017-04-12 10:12:04

标签: c# asp.net-mvc autofac repository-pattern asp.net-authorization

我对服务& amp;存储库模式,我已经使用Autofac IoC实现了它 我能正确使用普通控制器的模式,但是[授权]属性有问题 我在授权中使用自定义角色提供程序:以下是我的配置中的行:

<roleManager defaultProvider="CustomRoleProvider" enabled="true" cacheRolesInCookie="false">
  <providers>
    <clear />
    <add name="CustomRoleProvider" type="PLC.MyRoleProvider" />    
  </providers>
</roleManager>

这是实现System.Web.Security.RoleProvider类的MyRoleProvider类的片段:

public class MyRoleProvider : RoleProvider
{
    ILoginService _loginService;

    public MyRoleProvider(ILoginService loginService)
    {
        _loginService = loginService;
    }

    public override string[] GetRolesForUser(string userName)
    {
        var user = _loginService.FindBy(p => p.NAME == userName).FirstOrDefault();

        string[] val = user.ACCESS.Split(',');

        return val;            
    }
    //. . . and some other methods 
}

我的控制器:

    [Authorize(Roles ="SuperAdmin,Admin")]
    public class TestController 
    {
        ILoginService _loginService;
        MyRoleProvider _roleProvider;
        public TestController(ILoginService loginService, MyRoleProvider roleProvider)
        {
            _loginService = loginService;
            _roleProvider = roleProvider;
        }
    //. . .

Golbal.asax.cs:

builder.RegisterType<MyRoleProvider>().As<MyRoleProvider>().InstancePerRequest();

问题是它无法获取MyRoleProvider的构造函数,给出错误:

  

没有为此对象定义无参数构造函数   Error Line

如果我尝试添加无参数构造函数(显然不是这样),它将为_loginService

提供null实例

请建议我如何解决这个问题。

感谢。

0 个答案:

没有答案