/// <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); }
/// <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); }
/// <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); }