-2

我有以下问题。

我的自动属性 ​​SearchedObjClass,SearchedProp ,SearchedPropValue 结果为空值,尽管我在主程序中为它们分配了值:有人可以帮我找出问题所在:

class ADClassNew
{
    public static DirectoryEntry createDirectoryEntry()
    {
            string ldapusername = "Username";
            string ldapuserpass = "Password";

        using (DirectoryEntry root =new DirectoryEntry())
        {
            ADClassNew adclass = new ADClassNew();
            root.Path = adclass.LdapPath;
            root.Username = ldapusername;
            root.Password = ldapuserpass;
            root.AuthenticationType = AuthenticationTypes.Secure;
            return root;
        }


     }

    public string SearchedObjClass { get; set; }
    public string SearchedProp { get; set; }
    public string SearchedPropValue { get; set; }
    public string LdapPath { get; set; }
    public StringCollection LoadProperties { get; set; }

    public SearchResult searchDirectory()
    {

        DirectoryEntry searchEntry = ADClassNew.createDirectoryEntry();
        DirectorySearcher search = new DirectorySearcher();
        search.SearchRoot = searchEntry;
        ADClassNew adclassnew = new ADClassNew();

       //string _searchedObjClass = SearchedObjClass;
       //string _searchedProp = SearchedProp;
       //string _searchedPropValue = SearchedPropValue;

       search.Filter = string.Format("(&(ObjectClass={0})({1}={2}))", adclassnew.SearchedObjClass, adclassnew.SearchedProp, adclassnew.SearchedPropValue);
       //search.Filter = "(&(objectClass=user)(cn=administrator))";
       search.PropertiesToLoad.Add("memberof");
           SearchResult result = search.FindOne();
       return result;

    }
}


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ADClassNew adclassnew = new ADClassNew();
        adclassnew.LdapPath = "LDAP://MyDomain";
        adclassnew.SearchedObjClass = "User";
        adclassnew.SearchedProp = "Displayname";
        adclassnew.SearchedPropValue = "administrator";
    }
}
4

1 回答 1

1

您不会对表单构造函数中创建的对象执行任何操作 - 它只是超出范围并被收集。您是否期望这些值在 的所有实例中持续存在ADClassNew?如果是这样,那么使用static属性:

public static string SearchedObjClass { get; set; }
public static string SearchedProp { get; set; }
public static string SearchedPropValue { get; set; }
public static string LdapPath { get; set; }

然后使用类名而不是实例在初始化中设置它们:

ADClassNew.LdapPath = "LDAP://MyDomain";
ADClassNew.SearchedObjClass = "User";
ADClassNew.SearchedProp = "Displayname";
ADClassNew.SearchedPropValue = "administrator";

或者,您可以使对象成为表单的属性以重新使用它:

public partial class Form1 : Form
{
    private ADClassNew _adClassNew {get; set;}

    public Form1()
    {
        InitializeComponent();

        _adclassnew = new ADClassNew();
        _adclassnew.LdapPath = "LDAP://MyDomain";
        _adclassnew.SearchedObjClass = "User";
        _adclassnew.SearchedProp = "Displayname";
        _adclassnew.SearchedPropValue = "administrator";
    }
}
于 2013-08-26T14:06:01.897 回答