Пример #1
0
        public static StreamContext FromSource(Uri source)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            // Look for native providers (file, res, iso, mem, stream)
            if (source.IsAbsoluteUri)
            {
                switch (source.Scheme)
                {
                case "file":
                    return(new FileSystemStreamContext(source, null));

                case "data":
                    return(new DataStreamContext(source));

                case "invalid":
                    return(StreamContext.Invalid);

                case "null":
                    return(StreamContext.Null);

                case "stdout":
                    // TODO Consider implementing an alternative using Console stream
                    return(new StreamStreamContext(new Uri("stdout://"),
                                                   Console.OpenStandardOutput(),
                                                   Console.OutputEncoding));

                case "stderr":
                    return(new StreamStreamContext(new Uri("stderr://"),
                                                   Console.OpenStandardError(),
                                                   Console.OutputEncoding));

                case "stdin":
                    return(new StreamStreamContext(new Uri("stdin://"),
                                                   Console.OpenStandardInput(),
                                                   Console.InputEncoding));

                case "stream":
                    throw RuntimeFailure.ForbiddenStreamStreamContext();

                case "https":
                case "http":
                    return(new HttpClientStreamContext(source));

                default:
                    throw RuntimeFailure.StreamContextUriSchemeNotSupported();
                }
            }
            else
            {
                // Relative URIs must be handled in this way
                return(FromFile(source.ToString()));
            }
        }