在下面的代码中,处理principalCtx
会影响userPrin
吗?
principalCtx
仅用于查找用户,还是以某种方式与userPrin
对象保持关联?
UserPrincipal userPrin= null;
using(PrincipalContext principalCtx as new PrincipalContext(ContextType.Domain)){
userPrin= UserPrincipal.FindByIdentity(principalCtx, IdentityType.SamAccountName, "first.last");
}
return userPrin;
答案 0 :(得分:1)
UserPrincipal
和PrincipalContext
都是一次性类,这表明它们的处置有些独立。 但我在实践中发现,处理PrincipalContext
显然确实会对UserPrincipal
产生一些影响。虽然我可以在UserPrincipal
处置后仍然能够访问PrincipalContext
的属性,但如果我尝试调用方法,请{{1}在放置GetGroups()
之后的UserPrincipal
上,我收到有关尝试访问已处置对象的错误。
但请记住,仅仅因为它有效果并不意味着你在使用它时也不应该单独处理PrincipalContext
对象。没有人知道可能需要独立于UserPrincipal
清理哪些单独的资源UserPrincipal
。
对代码的建议摘要:
PrincipalContext
被处置后尝试访问userPrin
,或者如果您这样做,请确保您只访问不会给您错误的属性,因为我已经验证了在处理完上下文后访问方法可能会出错。principalCtx
或将其包含在userPrin
块中。答案 1 :(得分:0)
由于UserPrincipal
需要PrincipalContext
的实例,我不会这样做。将您的代码与此进行比较:
StreamReader reader;
using (Stream input = File.OpenRead(@"c:\test.txt"))
{
reader = new BinaryReader(input);
}
reader.Read();
虽然我们在这个问题中谈论的是PrincipalContext
,而不是文件,但设计是一样的 - 你永远不知道底层的内容是什么。
附注:BinaryReader
实际上有an overload,可让您指定是要清理还是让BinaryReader
为您执行此操作。