首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlRoleProvider.GetRolesForUser混淆:“未将对象引用设置为对象的实例”

SqlRoleProvider.GetRolesForUser混淆:“未将对象引用设置为对象的实例”
EN

Stack Overflow用户
提问于 2014-01-09 11:07:31
回答 2查看 440关注 0票数 0

这是不久前发生在我身上的事。在我的代码中,我需要获取指定用户在其中分配的Roles

以下是我的代码中的内容:

代码语言:javascript
复制
string[] roles = {};
SqlRoleProvider fxSRP = new SqlRoleProvider();

string id = Request.QueryString["UserName"] as string;

string userName = id;

这一切都很好,但当我讲到这一点时:

代码语言:javascript
复制
roles = fxSRP.GetRolesForUser(userName);

系统会抛出那个被遗弃的Object reference not set to an instance of an object异常。老实说,有几分钟我都快疯了。但是,当我将这一小段代码改为这样(这是一个显式调用,对吧?):

代码语言:javascript
复制
roles = Roles.GetRolesForUser(userName);

代码起作用了。我能够检索用户的Roles并随心所欲地使用它们。

我想知道,为什么从实例化的SqlRoleProvider中使用GetRolesForUser不起作用?因为这也可能发生在我将要处理的下一段代码中,即使用RemoveUsersFromRolesAddUsersToRoles。另外,程序寻找的是什么类型的实例?为了让方法正常工作,我还没有实例化哪些内容?

EN

回答 2

Stack Overflow用户

发布于 2014-01-09 11:29:12

您调用的是new SqlRoleProvider(),但根据该构造函数http://msdn.microsoft.com/en-us/library/system.web.security.sqlroleprovider.sqlroleprovider.aspx的文档

ASP.NET调用SqlRoleProvider构造函数来创建在应用程序配置中指定的SqlRoleProvider类的实例。此构造函数不应在代码中使用。

(重点是我的。)我不是这门课的专家,但我认为这句话表明你不应该尝试这样做。

票数 1
EN

Stack Overflow用户

发布于 2014-01-09 12:19:16

尽管@Chris Culter的建议可能会更好地作为注释,但如果框架建议不要直接实例化对象,那么很可能你不应该这样做。这样做可能会跳过实例化对象上的几个重要初始化步骤,这意味着您可能没有很好地提供它,无法满足其预期用途。

您偶然发现了实现目标的推荐方法,那么为什么还要为不起作用的选项而烦恼呢(特别是考虑到它显然不是推荐的)?

如果以这种方式使用这个类有什么特别的收获,那么我建议将相关的程序集放到ILSpy或Reflector中,并开始深入研究框架是如何使用您的特定用例的,以确保您将行为模拟为T。

即使仍然依赖于不推荐的行为,无论它可能是多么公开,都是非常不受欢迎的,因为将来可能会在没有通知的情况下进行更改。最好依赖于类的使用方式,而不是小众的编译要求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21010956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档