如何以编程方式在ASP.NET MVC 5中注册RoleProvider?

时间:2016-03-17 15:11:03

标签: c# asp.net-mvc asp.net-mvc-5

我使用依赖注入技术实现了角色提供程序。因为该类没有无参数构造函数(在那里注入了存储库),通常的web.config注册方法不起作用。

我试图在我的Global.asax应用程序启动事件中手动注册提供程序,但是我得到一个NotSupportedException,指出无法修改Roles.Providers集合。

Roles.Providers.Clear();
Roles.Providers.Add(new RepositoryRoleProvider(new MyRepositoryFactory()));

在没有无参数构造函数的情况下注册角色提供程序的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

有一篇文章介绍了how to implement and register a role provider。它使用的是“提供者模式”。

由于它使用“提供者模式”it is not possible to use constructor injection,因为构造函数被约束为使用默认的公共构造函数。

所以,你的选择并不好:

  1. Initialize方法中实例化您的存储库工厂(请注意,如果它有默认构造函数,您可以将其类型字符串放在配置文件中并使用Activator.CreateInstance构建它)。
  2. 使用对DI容器(服务定位器)的静态引用来解决依赖关系。
  3. 如果您有选择,最好使用ASP.NET Identity而不是会员资格,因为它更适合DI。