это, безусловно, основной вопрос для большинства из вас, но он все еще вызывает у меня головную боль, когда я думаю об этом.
У меня есть класс репозитория, который принимает имя домена для создания экземпляра:
public class RepositoryUserAD : IRepositoryUserAD , IDisposable
{
PrincipalContext context;
public RepositoryUserAD(string domainName)
{
if (string.IsNullOrEmpty(domainName))
throw new Exception("the domainName cannot be null or empty");
DomainName = domainName;
context = new PrincipalContext(ContextType.Domain, DomainName);
}
public UserPrincipal GetUser(string username)
{
UserPrincipal foundUser = null;
foundUser = UserPrincipal.FindByIdentity(context, username);
return foundUser;
}
public void Dispose()
{
context.Dispose();
}
}
А вот и моя проблема. Если я так работаю, это нормально, но мне не нравится, когда мой контекст открывается с помощью класса и закрывается для удаления класса.
Я также могу использовать блок using, но затем я сталкиваюсь с другой проблемой, потому что теряю ссылку на контекст и, следовательно, на объект или, по крайней мере, на свойства, которые я не получил первым.
Моя архитектура следующая
Repository r = new Repository();
Service s = new Service(r);
Я разрываюсь на две части, потому что в моем общем подходе мне бы хотелось иметь возможность фильтровать мой запрос в службе и просить хранилище действительно извлечь данные. Но здесь, с помощью AD, я не могу открыть и закрыть свое соединение на уровне репозитория, или я теряю гибкость, и репозиторий получает все.
Все непонятно, потому что в моей голове тоже непонятно, я просто надеюсь, что кто-то покажет мне один выход из этого с ***.
Спасибо за вашу поддержку,