У меня есть исключение, которое срабатывает, когда я тестирую мой код с использованием библиотеки Linq to AD .
Я использую репозиторий с этой функцией:
public UserAD GetUser(string username)
{
UserAD user = null;
using (Root = CreateDirectoryEntry())
{
var users = new DirectorySource<UserAD>(Root, SearchScope.Subtree);
user = users.Where(x => x.AccountName == username)
.AsEnumerable()
.SingleOrDefault(); //not supported in LDAP; alternative in-memory SingleOrDefault
}
return user;
}
Это прекрасно работает, когда я вызываю его напрямую:
[TestMethod]
public void RepositoryUtenteAD_GetUser()
{
UserAD user = repositoryAD.GetUser("TestAD_OK");
Assert.AreEqual("blablabla", user.DistinguishedName);
Assert.IsFalse(user.AccountDisabled);
}
Но я могу использовать другой метод, который вызовет GetUser:
[TestMethod]
public void RepositoryUtenteAD_AutenticazioneUtente_Authentication()
{
IAutenticazione auth = repositoryAD.AutenticazioneUtente("TestAD_OK", "TestAD_OK");
Assert.IsTrue(auth.IsAuthenticated);
}
, и метод аутентификации выглядит следующим образом (очищено от смысла и деталей, ошибка осталась там):
public IAutenticazione AutenticazioneUtente(string username, string password)
{
bool IsWhyNotAuthentifiedFound = false;
IAutenticazione authenticazione = new Autenticazione();
UserAD user = GetUser(username);
return authenticazione;
}
Тест работает нормально, assert дает мне правильное значение, но после очистки моего теста у меня возникло исключение отсоединенного контекста.Я предполагаю, что это происходит из библиотеки Interop.Adsi, которую я использую.
В GetUser (имя пользователя) Должен ли я скопировать все, что есть в моем UserAD, чтобы сделать клон и, таким образом, очистить его от контекста ...?Или есть более умный способ приблизиться?
Спасибо за ваше чтение!