/// <summary>

        /// </summary>
        /// <param name="directoryEntry"></param>

        public LDAPObject CreateObject(DirectoryEntry directoryEntry)
        {
            if (directoryEntry == null)
            {
                throw new ArgumentNullException("directoryEntry");
            }

            LDAPObject result = null;

            string schemaClassName = null;

            try
            {
                schemaClassName = directoryEntry.SchemaClassName;
            }
            catch (Exception e)
            {
                _log.ErrorFormat("Can't get directoryEntry.SchemaClassName property. {0}", e);
            }
            finally
            {
            }

            switch (schemaClassName)
            {
            case Constants.ObjectClassKnowedValues.Domain:
            case Constants.ObjectClassKnowedValues.DomainDNS:
                result = new LDAPDomain(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.User:
                result = new LDAPUser(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.Computer:
                result = new LDAPComputer(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.Group:
                result = new LDAPGroup(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.Container:
                result = new LDAPContainer(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.RpcContainer:
                result = new LDAPRpcContainer(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.BuildInDomain:
                result = new LDAPBuildInDomain(directoryEntry);
                break;

            case Constants.ObjectClassKnowedValues.OrganizationalUnit:
                result = new LDAPOrganizationalUnit(directoryEntry);
                break;


            default:
                result = new LDAPOtherObject(directoryEntry);
                break;
            }


            return(result);
        }
        /// <summary>
        
        /// </summary>
        /// <param name="directoryEntry"></param>
        
        public LDAPObject CreateObject(DirectoryEntry directoryEntry)
        {
            if (directoryEntry == null)
                throw new ArgumentNullException("directoryEntry");

            LDAPObject result = null;

            string schemaClassName = null;

            try
            {
                schemaClassName = directoryEntry.SchemaClassName;
            }
            catch (Exception e)
            {
                _log.ErrorFormat("Can't get directoryEntry.SchemaClassName property. {0}", e);
            }
            finally 
            { 
                
            }

            switch (schemaClassName)
            {
                case Constants.ObjectClassKnowedValues.Domain:
                case Constants.ObjectClassKnowedValues.DomainDNS:
                    result = new LDAPDomain(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.User:
                    result = new LDAPUser(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.Computer:
                    result = new LDAPComputer(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.Group:
                    result = new LDAPGroup(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.Container:
                    result = new LDAPContainer(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.RpcContainer:
                    result = new LDAPRpcContainer(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.BuildInDomain:
                    result = new LDAPBuildInDomain(directoryEntry);
                    break;
                case Constants.ObjectClassKnowedValues.OrganizationalUnit:
                    result = new LDAPOrganizationalUnit(directoryEntry);
                    break;


                default:
                    result = new LDAPOtherObject(directoryEntry);
                    break;
            }


            return result;
        }