/// <summary> /// 构造函数 /// </summary> /// <param name="instances">MetaConfigurationSourceInstanceElementCollection对象(集合)</param> public BestFileNameMatchStrategy(MetaConfigurationSourceInstanceElementCollection instances) { if (instances == null) throw new NullReferenceException("instances"); path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName); path = FormatPath(path); candidates = FileterPath(instances, false); }
/// <summary> /// 构造函数 /// </summary> /// <param name="instances">MetaConfigurationSourceInstanceElementCollection对象(集合)</param> public BestFileNameMatchStrategy(MetaConfigurationSourceInstanceElementCollection instances) { if (instances == null) { throw new NullReferenceException("instances"); } path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName); path = FormatPath(path); candidates = FileterPath(instances, false); }
/// <summary> /// 构造函数 /// </summary> /// <param name="instances">MetaConfigurationSourceInstanceElementCollection对象(集合)</param> public BestDirectoryMatchStrategy(MetaConfigurationSourceInstanceElementCollection instances) { instances.NullCheck("instances"); if (EnvironmentHelper.IsUsingWebConfig) this.path = HostingEnvironment.ApplicationVirtualPath; else this.path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; this.path = FormatPath(path); this.candidates = FileterPath(instances, true); }
/// <summary> /// 构造函数 /// </summary> /// <param name="instances">MetaConfigurationSourceInstanceElementCollection对象(集合)</param> public BestDirectoryMatchStrategy(MetaConfigurationSourceInstanceElementCollection instances) { instances.NullCheck("instances"); if (EnvironmentHelper.IsUsingWebConfig) { this.path = HostingEnvironment.ApplicationVirtualPath; } else { this.path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; } this.path = FormatPath(path); this.candidates = FileterPath(instances, true); }
/// <summary> /// 依照路径类型(文件/目录)和格式筛选路径 /// </summary> /// <param name="instances">MetaConfigurationSourceInstanceElementCollection</param> /// <param name="isDirectory">是否目录</param> /// <returns>KeyValuePair 中 Value 为 meta.config 文件, key 为application 路径</returns> protected IList <KeyValuePair <string, string> > FileterPath(MetaConfigurationSourceInstanceElementCollection instances, bool isDirectory) { if ((instances == null) || (instances.Count <= 0)) { return(null); } IList <KeyValuePair <string, string> > result = new List <KeyValuePair <string, string> >(); InstanceMode mode = EnvironmentHelper.IsUsingWebConfig ? InstanceMode.Web : InstanceMode.Windows; IEnumerable <MetaConfigurationSourceInstanceElement> matchedInstances = GetMatchedInstances(instances, mode); foreach (MetaConfigurationSourceInstanceElement instance in matchedInstances) { if (instance.Mappings == null || (instance.Mappings.Count == 0)) { continue; } string metaConfig = FormatPath(instance.Path); foreach (MetaConfigurationSourceMappingElement mapping in instance.Mappings) { string applicationPath = mapping.Application; if (false == (isDirectory ^ IsDirectory(applicationPath))) { if (EnvironmentHelper.IsUsingWebConfig) { ////当web访问时,将路径都转化为通过相对路径进行匹配 //if (pathAbsolute == null) // pathAbsolute = new Uri(path, UriKind.Relative); //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 = appAbsolute.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped); // } //} applicationPath = FormatPath(applicationPath); } else { applicationPath = FormatPath(Path.GetFullPath(applicationPath)); } KeyValuePair <string, string> item = new KeyValuePair <string, string>(applicationPath, metaConfig); result.Add(item); } } } return(result); }
private static IEnumerable <MetaConfigurationSourceInstanceElement> GetMatchedInstances(MetaConfigurationSourceInstanceElementCollection instances, InstanceMode mode) { List <MetaConfigurationSourceInstanceElement> modeMatched = new List <MetaConfigurationSourceInstanceElement>(instances.FilterByInstanceMode(mode)); List <MetaConfigurationSourceInstanceElement> result = null; if (mode == InstanceMode.Web) { //匹配站点名称 List <MetaConfigurationSourceInstanceElement> matchedItems = modeMatched.FindAll(i => string.Compare(i.Name, HostingEnvironment.SiteName, true) == 0); if (matchedItems.Count == 0) { //如果站点名称没有匹配到,则添加默认项 if (modeMatched.Count > 0) { matchedItems.Add(modeMatched[0]); } } result = new List <MetaConfigurationSourceInstanceElement>(matchedItems); } else { result = modeMatched; } return(result); }