2016-03-17 47 views
3

我已经使用依赖注入技术实现了角色提供者。因此,由于该类没有无参数构造函数(在那里注入一个存储库),所以通常的注册方法web.config不起作用。如何在ASP.NET MVC 5中以编程方式注册RoleProvider?

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

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

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

+0

我为我的项目做的是注入到Roles.Provider(而不是providerS)属性中。我不知道是否仍然可用在MVC 5.例如使用ninject我做了像NinjectWebCommon.Kernel.Inject(Roles.Provider); –

+0

@MassimoFranciosa感谢您的评论。如果我理解正确,你使用属性注入。我对吗? –

+0

编辑:对不起,我检查,我实际上仍然使用web.config来指定类。为了实现类似的东西,我将构造函数的依赖关系移到了属性中。 (就像你说的:)) –

回答

1

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

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

所以,你的选择是不是好:

  1. 实例化资源库的工厂在Initialize方法(注意,如果它有一个默认的构造函数,你可以把它的类型字符串中的配置文件,并使用Activator.CreateInstance建设它)。
  2. 使用对您的DI容器(服务定位器)的静态引用来解析依赖关系。

如果您有选择,最好使用ASP.NET Identity而不是成员资格,因为它对DI更友好。

+0

谢谢你的详细答案和提示 –

相关问题