我是否需要实例化此类(SimpleRoleProvider)?

时间:2014-01-16 10:44:38

标签: asp.net-mvc-4 simplemembership

我在Simplemembership中创建了一个角色,如下所示:

Roles.CreateRole("Admin")

它工作正常,但我看到人们实例化然后调用CreateRole方法,如下所示:

var roles = (SimpleRoleProvider)System.Web.Security.Roles.Provider;

roles.CreateRole("Admin")

所以这实际上就像说:

Roles.Provider.CreateRole("Admin")

我的问题是,我正在这样做是好的,因为我使用system.web.security.roles类而没有实例化它。感谢

2 个答案:

答案 0 :(得分:1)

这不是实例化。它只是对局部变量的强制转换:

var roles = (SimpleRoleProvider)System.Web.Security.Roles.Provider;

这两种方法没有任何区别。他们是一样的。

唯一的好处是,如果您的CustomRoleProvider有一些额外的方法,您想要调用,那么您需要将其强制转换。

在这种情况下的实例化将是:

var roles = new SimpleRoleProvider();

但是在RoleProvider机制的情况下它没有任何意义,因为它不会使用角色提供者集合

答案 1 :(得分:0)

调用方法CreateRole时没有区别,因为它在Roles和SimpleRoleProvider类中都可用。这两个类的区别在于可用的方法和属性。比较Roles class definitiondefinition of SimpleRoleProvider。例如,Roles没有属性UserIdColumn,而SimpleRoleProvider则没有,因为它特定于SimpleMebmership实现并且可能很有用。由于SimpleRoleProvider是为SimpleMembership配置的实际提供程序,因此将其强制转换为该提供程序会更安全。如果在Roles中调用未在SimpleRoleProvider中实现的方法,则会抛出未实现的异常。通过强制转换为SimpleRoleProvider,您可以看到使用IntelaSense的提供程序实际可以使用哪些属性和方法。