internal DnsClient(
     IPEndPoint serverEndPoint,
     RequestBuilder requestBuilder,
     ResolverFactory resolverFactory,
     ResponseParser responseParser)
 {
     _dnsPermissions = new DnsPermission(PermissionState.Unrestricted);
     _serverEndPoint = serverEndPoint;
     _requestBuilder = requestBuilder;
     _resolverFactory = resolverFactory;
     _responseParser = responseParser;
 }
        public IDnsClient Build()
        {
            var requestBuilder = new RequestBuilder(_logger);

            var recordTextParser = new RecordTextParser();
            var recordParser = new RecordNameParser(new NullLogger());
            
            var parserFactory = new ParserFactory(
                new AParser(),
                new AaaaParser(),
                new MxParser(recordParser),
                new RpParser(recordParser),
                new MrParser(),
                new MbParser(),
                new MgParser(),
                new NsParser(),
                new CNameParser(recordParser),
                new PtrParser(),
                new HInfoParser(recordTextParser),
                new MInfoParser(recordParser),
                new X25Parser(recordTextParser),
                new TxtParser(recordTextParser),
                new LocParser(),
                new SoaParser(recordParser),
                new SrvParser(recordParser),
                new AfsdbParser(recordParser),
                new AtmaParser(),
                new IsdnParser(recordTextParser),
                new RtParser(recordParser),
                new UnknownParser(),
                new WksParser());

            var resolverFactory = new ResolverFactory(
                new TcpResolver(_timeout),
                new UdpResolver(_timeout));

            var responseParser = new ResponseParser(
                new RecordNameParser(_logger),
                parserFactory);

            return new DnsClient(
                _serverEndPoint,
                requestBuilder,
                resolverFactory,
                responseParser);
        }