C# 扩展GroupPrincipal和Members属性

C# 扩展GroupPrincipal和Members属性,c#,active-directory,directoryservices,account-management,C#,Active Directory,Directoryservices,Account Management,我想扩展GroupPrincipal类来处理一些自定义属性: using System.DirectoryServices.AccountManagement; [DirectoryRdnPrefix("CN")] [DirectoryObjectClass("group")] public class MyGroupPrincipal : GroupPrincipal { // ... } 我如何覆盖MyGroupPrincipal的Members属性,以便如果其成员是组,则返回M

我想扩展
GroupPrincipal
类来处理一些自定义属性:

using System.DirectoryServices.AccountManagement;

[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("group")]
public class MyGroupPrincipal : GroupPrincipal {
    // ...
}
我如何覆盖
MyGroupPrincipal
Members
属性,以便如果其成员是组,则返回
MyGroupPrincipal
而不是
GroupPrincipal
的实例?我想写信

MyGroupPrincipal group = GetGroup();
foreach (var m in group.Members) {
    if (m is MyGroupPrincipal) { // always fails: m is a normal GroupPrincipal 
        // do something
    }
}

无法直接重写GroupPrincipal的Members属性。相反,您可以使用自己的方法(很抱歉没有清晰的代码,但我在代码中使用了下面描述的部分解决方案)

我发现AccountManagement库中有很多次,您只需使用基本的DirectoryEntry就可以正确完成任务。您可以使用
group.getunderyingobject()
访问基本对象,然后通过迭代
deGroup.Properties(“成员”)
读取成员资格。读取每个成员类型(记不起属性名,可能是'member.SchemaClassName'?)和DiscrimitedName(
member.Properties(“DiscrimitedName”)(0.ToString()
),然后基于类型创建一个switch语句,在该语句中使用可分辨名称
MyGroupPrincipal.FindByIdentity创建每个主体(上下文、区分名称)
,并对用户执行相同操作,等等