그룹, 조직 구성 단위 및 사용자와 같은 기본 Active Directory 개체를 처리하기 위해 제네릭 형식을 작성하고 있습니다.일반 인터페이스 VS 일반 메서드?
제 일반적인 인터페이스에 "수동"의존성 삽입도 사용하고 있습니다. 제 상황에서 더 적절한 지 알고 싶습니다 : 제네릭 인터페이스 또는 일반적인 방법?
는 다음을 보여 간단한 코드 예제입니다 :
public interface IDirectorySource<T> where T : IDirectoryEntry {
IDirectorySearcher<T> Searcher { get; }
CustomSet<T> ToList(); // Related to my question, as I will here only return Searcher.ToList();
}
public interface IDirectorySearcher<T> where T : IDirectoryEntry {
DirectorySearcher NativeSearcher { get; }
CustomSet<T> ToList(); // Related to my question...
}
public sealed class GroupSearcher : IDirectorySearcher<Group> {
public GroupSearcher(DirectoryEntry root, SearchScope scope) {
// Instantiating...
}
public DirectorySearcher NativeSearcher { get; private set; }
public CustomSet<T> ToList() { // That is the point of my question.
// Listing all T objects found in AD...
}
}
public sealed class DirectorySource<T> : IDirectorySource<T> where T : IDirectoryEntry {
public DirectorySource(IDirectorySearcher<T> searcher) {
Searcher = searcher;
}
public IDirectorySearcher<T> Searcher { get; private set; }
public CustomSet<T> ToList() { // Here's the point to my question.
return Searcher.ToList();
}
}
그래서, 여기 내 지점입니다. 내 인터페이스를 비 제너릭으로 만들고 싶습니다. 내 DirectorySource<T>
클래스를 공개으로 승격시켜 드리겠습니다. 그래서 나는 단지과 같이 소스를 선언해야합니다 :
GroupSearcher groupSearcher = new GroupSearcher(root, scope);
IDirectorySource groups = new DirectorySource<Group>(groupSearcher);
그래서 내가 할 수있는 그룹의 목록을 가져 오지하는 것 : 내 IDirectorySource<T>
인터페이스는 일반적인하자 여부를
groups.ToList(); // Getting all the existing groups in AD here...
을하지만 난 궁금해, 또는 비 제너릭으로 만들고 대신 IDirectorySource.ToList()
메서드를 일반으로 만들어야하므로 내 인터페이스를 입력 할 필요가 없으므로 내 인터페이스의 인스턴스를 제공하는 클래스 만 입력하면됩니다.
그렇게처럼 내 인터페이스를 작성하는 더 좋을 거라 :
public interface IDirectorySource {
CustomSet<T> ToList<T>();
} // With all the appropriate changes, indeed.
나는 이것이 아마 충분히 명확 아니라는 것을 알고 있습니다. 당신이 나를 도울 수 있도록 당신의 질문을 물어보십시오.
미리 감사드립니다. =) IDirectorySource같은 인스턴스 의를 들어
.NET 3.5에서 AccountManagement 네임 스페이스를 사용할 수 있습니까? 아마도 코드를 쓸 필요가 없습니다. – tvanfosson
"단순화 된 코드 샘플"은 좀 더 단순화를 사용할 수 있습니다. 토론 할 패턴 만 보여주기 위해 코드를 축소 해보십시오. 샘플에 많은 불필요한 세부 정보가 있습니다 (예 : FindProperties() 등). – Karmastan
불행히도 Bart de Smet의 LINQ-to-AD 라이브러리를 사용할 수 있었기 때문에 .NET 3.5를 사용할 수 없었습니다. =) 그래도 제안 주셔서 감사합니다! –