我在Simplemembership中创建了一个角色,如下所示:
Roles.CreateRole("Admin")
它工作正常,但我看到人们实例化然后调用CreateRole方法,如下所示:
var roles = (SimpleRoleProvider)System.Web.Security.Roles.Provider;
roles.CreateRole("Admin")
所以这实际上就像说:
Roles.Provider.CreateRole("Admin")
我的问题是,我正在这样做是好的,因为我使用system.web.security.roles类而没有实例化它。感谢
答案 0 :(得分:1)
这不是实例化。它只是对局部变量的强制转换:
var roles = (SimpleRoleProvider)System.Web.Security.Roles.Provider;
这两种方法没有任何区别。他们是一样的。
唯一的好处是,如果您的CustomRoleProvider有一些额外的方法,您想要调用,那么您需要将其强制转换。
在这种情况下的实例化将是:
var roles = new SimpleRoleProvider();
但是在RoleProvider机制的情况下它没有任何意义,因为它不会使用角色提供者集合
答案 1 :(得分:0)
调用方法CreateRole时没有区别,因为它在Roles和SimpleRoleProvider类中都可用。这两个类的区别在于可用的方法和属性。比较Roles class definition到 definition of SimpleRoleProvider。例如,Roles没有属性UserIdColumn,而SimpleRoleProvider则没有,因为它特定于SimpleMebmership实现并且可能很有用。由于SimpleRoleProvider是为SimpleMembership配置的实际提供程序,因此将其强制转换为该提供程序会更安全。如果在Roles中调用未在SimpleRoleProvider中实现的方法,则会抛出未实现的异常。通过强制转换为SimpleRoleProvider,您可以看到使用IntelaSense的提供程序实际可以使用哪些属性和方法。