2014-01-16 42 views
0

我创造了Simplemembership一个角色,像这样:我是否需要实例化这个类(SimpleRoleProvider)?

Roles.CreateRole("Admin") 

它工作正常,但我看到有人实例,然后调用CREATEROLE方法,像这样:

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

roles.CreateRole("Admin") 

所以这实际上是像他说:

Roles.Provider.CreateRole("Admin") 

我的问题是,是我做的就OK了,因为我现在用的是system.web.security.roles类没有实例我的方式吨。谢谢

回答

1

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

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

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

唯一的好处是,如果你的CustomRoleProvider会有一些额外的方法,你想调用,那么你需要投它。

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

var roles = new SimpleRoleProvider(); 

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

+0

好的谢谢。现在你说这是有道理的。仍在学习。谢谢 – mattbloke

+0

欢迎:) –

0

当调用方法CREATEROLE没有因为它在Roles和SimpleRoleProvider类中都可用。这两个类的区别在于可用的方法和属性。比较Roles class definition与 的definition of SimpleRoleProvider。例如,Roles没有UserIdColumn属性,而SimpleRoleProvider没有,因为它是SimpleMebmership实现特有的,并且可能很有用。由于SimpleRoleProvider是为SimpleMembership配置的实际提供者,因此将其转换为该提供者更为安全。如果您在角色中调用未在SimpleRoleProvider中实现的方法,则会引发未实现的异常。通过投射到SimpleRoleProvider,您可以看到使用IntelaSense的供应商实际上可以使用哪些属性和方法。

相关问题