Пример #1
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="instances">MetaInstanceConfigurationElementCollection集合对象</param>
        public FileNameMatchStrategy(MetaInstanceConfigurationElementCollection instances)
        {
            CoreHelper.ExceptionHelper.TrueThrow <NullReferenceException>(instances == null, "配置节点{0}不存在", "sourceMapping/instances");

            base.path       = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName);
            base.path       = ToLowerTrim(base.path);
            base.candidates = FileterPath(instances, false);
        }
Пример #2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="instances">MetaInstanceConfigurationElementCollection集合对象</param>
        public DirectoryMatchStrategy(MetaInstanceConfigurationElementCollection instances)
        {
            CoreHelper.ExceptionHelper.TrueThrow <NullReferenceException>(instances == null, "配置节点{0}不存在", "sourceMapping/instances");

            base.path = CoreHelper.EnvironmentHelper.Mode == EnumInstanceMode.Web
                                ? HttpContext.Current.Request.Url.AbsoluteUri
                                : AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            base.path       = ToLowerTrim(base.path);
            base.candidates = FileterPath(instances, true);
        }
Пример #3
0
        /// <summary>
        ///  依照路径类型(文件/目录)和格式筛选路径
        /// </summary>
        /// <param name="instances"></param>
        /// <param name="isDirectory">是否为目录</param>
        /// <returns></returns>
        protected IDictionary <string, string> FileterPath(MetaInstanceConfigurationElementCollection instances, bool isDirectory)
        {
            if (instances == null || instances.Count <= 0)
            {
                return(null);
            }
            IDictionary <string, string> result = new Dictionary <string, string>();

            //Uri pathAbsolute = null;

            foreach (MetaInstanceConfigurationElement instance in instances)
            {
                if (instance == null || instance.Mappings == null || instance.Mappings.Count <= 0 || instance.InstanceMode != CoreHelper.EnvironmentHelper.Mode)
                {
                    continue;
                }

                string metaConfig = ToLowerTrim(instance.Path);

                foreach (MetaApplicationsConfigurationElement mapping in instance.Mappings)
                {
                    string applicationPath = mapping.Application;
                    if (isDirectory ^ IsDirectory(applicationPath))
                    {
                        continue;
                    }

                    if (CoreHelper.EnvironmentHelper.Mode == EnumInstanceMode.Web)
                    {
                        //if (pathAbsolute == null)
                        //	pathAbsolute = new Uri(path, UriKind.Absolute);
                        Uri appAbsolute = new Uri(applicationPath, UriKind.RelativeOrAbsolute);
                        if (appAbsolute.IsAbsoluteUri)
                        {
                            //if (pathAbsolute.Scheme == appAbsolute.Scheme
                            //	&& pathAbsolute.Port == appAbsolute.Port
                            //	&& pathAbsolute.UserInfo == appAbsolute.UserInfo
                            //	&& pathAbsolute.Host == appAbsolute.Host
                            //	&& pathAbsolute.HostNameType == appAbsolute.HostNameType
                            //	)
                            {
                                applicationPath = ToLowerTrim(appAbsolute.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped));
                            }
                        }
                    }
                    else
                    {
                        applicationPath = ToLowerTrim(Path.GetFullPath(applicationPath));
                    }

                    result.Add(applicationPath, metaConfig);
                }
            }
            return(result);
        }