예제 #1
0
        /// <summary>
        /// 获得公用的filter
        /// </summary>
        /// <returns></returns>
        private List <IFilter> GetGlobalFilters()
        {
            List <ConfigSetting> assmList = new List <ConfigSetting>();

            if (_config != null &&
                _config.SOAConfig != null &&
                _config.SOAConfig.FilterConfigSection != null &&
                _config.SOAConfig.FilterConfigSection.Configs != null)
            {
                foreach (var value in _config.SOAConfig.FilterConfigSection.Configs)
                {
                    Assembly ass = null;
                    if (value.Type.ToLower().EndsWith(".dll"))
                    {
                        string fullPath = GetAssmStaticPath(value.Type);
                        ass = Assembly.LoadFile(fullPath);
                    }
                    else
                    {
                        ass = Assembly.Load(value.Type);
                    }
                    if (ass == null)
                    {
                        continue;
                    }
                    ConfigSetting setting = new ConfigSetting
                    {
                        Assembly     = ass,
                        FilterConfig = new Dictionary <string, object>(),
                    };
                    setting.FilterConfig["GlobalUse"] = value.GlobalUse;
                    if (!assmList.Contains(setting))
                    {
                        assmList.Add(setting);
                    }
                }
            }

            List <IFilter> list = new List <IFilter>();

            foreach (var ass in assmList)
            {
                IAnalyzer analyzer   = new ServiceAnalyzer(ass.Assembly);
                var       filterList = analyzer.AnalyzeFilter();
                if (filterList != null && filterList.Count > 0)
                {
                    list.AddRange(filterList);
                }
            }

            return(list);
        }
예제 #2
0
        public void FillPoolWithSingleAssembly(Assembly assmbly, List <IFilter> filterList)
        {
            #region 判断监视缓存
            FileInfo assFile = new FileInfo(assmbly.Location);
            if (_AssWatcher.ContainsKey(assmbly.FullName))
            {
                if (assFile.LastWriteTime <= _AssWatcher[assmbly.FullName])
                {
                    return;
                }
                else
                {
                    _AssWatcher[assmbly.FullName] = assFile.LastWriteTime;
                }
            }
            else
            {
                _AssWatcher[assmbly.FullName] = assFile.LastWriteTime;
            }
            #endregion

            IAnalyzer analyzer = new ServiceAnalyzer(assmbly);
            analyzer.AnalyzeService(_pool, filterList);
        }