/// <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);
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        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);
        }