我正在使用System.DirectoryServices
,我使用以下方法创建DirectoryEntry
:
static DirectoryEntry CreateDirectoryEntry(string connectionPath)
{
DirectoryEntry ldapConnection = null;
try
{
ldapConnection = new DirectoryEntry(AD_DOMAIN_NAME))
ldapConnection.Path = connectionPath;
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
}
catch (Exception ex)
{
MessageBox.Show("Exception Caught in createDirectoryEntry():\n\n" + ex.ToString());
}
return ldapConnection;
}
以这种方式调用此方法:
DirectoryEntry ldapConnection = CreateDirectoryEntry("LDAP://OU=Example,DC=domain,DC=com");
我读到最佳做法是对实现using
的任何内容使用IDisposable
语句。我的问题是,我是否需要在using
方法中使用CreateDirectoryEntry()
语句,还是应该为每次调用执行此操作?
为了说明我的意思,这是否足够?:
static DirectoryEntry CreateDirectoryEntry(string connectionPath)
{
DirectoryEntry ldapConnection = null;
try
{
using (ldapConnection = new DirectoryEntry(AD_DOMAIN_NAME))
{
ldapConnection.Path = connectionPath;
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
}
}
catch (Exception ex)
{
MessageBox.Show("Exception Caught in createDirectoryEntry():\n\n" + ex.ToString());
}
return ldapConnection;
}
或者我还需要在这样的通话中使用using
语句吗?:
using (DirectoryEntry ldapConnection = CreateDirectoryEntry("LDAP://OU=Example,DC=domain,DC=com"))
{
//Do something with ldapConnection
}
非常感谢任何帮助!
注意:我无法使用System.DirectoryServices.AccountManagement
来解决此问题,因此请保留与System.DirectoryServices
相关的答案。谢谢!
答案 0 :(得分:2)
你的最后一个代码片段是要走的路,否则你将向你的来电者返回一个处理掉的ldapConnection - 这不是一件好事。
使用!!使用+1
答案 1 :(得分:0)
你的第一个代码片段会在返回之前处理ldapConnection
,因此返回一个你显然不需要的处置对象。
你的功能应该是这样的:
static DirectoryEntry CreateDirectoryEntry(string connectionPath)
{
DirectoryEntry ldapConnection = null;
try
{
ldapConnection = new DirectoryEntry(AD_DOMAIN_NAME)
ldapConnection.Path = connectionPath;
ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
}
catch (Exception ex)
{
MessageBox.Show("Exception Caught in createDirectoryEntry():\n\n" + ex.ToString());
}
return ldapConnection;
}
虽然第二个代码段正确:要正确处置DirectoryEntry
,您应该使用using
。