Beispiel #1
0
        /// <summary>
        /// 从指定的表达式定义列表和表达式求值程序池里查找一个表达式求值程序
        /// 如果从表达式列表里找到了,那么反射实例化该表达式求值程序并把求值程序实例缓存到求值程序池里
        /// </summary>
        /// <param name="name">要查找的表达式的名字</param>
        /// <param name="exprDefines">表达式定义列表</param>
        /// <param name="evaluators">求值程序池</param>
        /// <returns></returns>
        private ExpressionEvaluator TryGetEvaluator(string name, List <ExpressionDefinition> exprDefines, Dictionary <string, ExpressionEvaluator> evaluators)
        {
            ExpressionEvaluator evaluator;

            if (!evaluators.TryGetValue(name, out evaluator))
            {
                ExpressionDefinition exprDefine = exprDefines.FirstOrDefault(def => def.Name == name);
                if (exprDefine == null)
                {
                    return(null);
                }

                try
                {
                    evaluator = ConfigFactory <ExpressionEvaluator> .CreateInstance(exprDefine.ClassName);
                }
                catch (Exception ex)
                {
                    logger.Error(string.Format("实例化{0}求值程序异常", name), ex);
                    return(null);
                }

                evaluators[name] = evaluator;
            }
            return(evaluator);
        }
        public static bool FindDemuxer(string demuxer_name, out AbstractAVDemuxer demuxer)
        {
            if (!demuxerMap.TryGetValue(demuxer_name, out demuxer))
            {
                string classEntry;
                if (!registry.TryGetValue(demuxer_name, out classEntry))
                {
                    logger.ErrorFormat("cannot find {0}", demuxer_name);
                    return(false);
                }

                try
                {
                    demuxer = ConfigFactory <AbstractAVDemuxer> .CreateInstance <AbstractAVDemuxer>(classEntry);
                }
                catch (Exception ex)
                {
                    logger.ErrorFormat("创建{0}实例异常", ex);
                    return(false);
                }

                demuxerMap[demuxer_name] = demuxer;
            }

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// 获取新创建的命名实例对象
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public I GetNew(string name)
        {
            var entity = ConfigFactory.Current.GetConfig(InterfaceName, name);

            if (entity != null)
            {
                return((I)ConfigFactory.CreateInstance(entity));
            }
            return(null);
        }
Beispiel #4
0
        private T testRoundTrip <T>(ConfigFactory <T> factory, T instance)
        {
            var factoryDefaultValues = factory.GetValues(instance);

            var roundTripInstance = factory.CreateInstance(factoryDefaultValues);

            Assert.IsTrue(factory.Equals(instance, roundTripInstance));
            Assert.AreEqual(factory.GetHashCode(instance), factory.GetHashCode(roundTripInstance));

            return(roundTripInstance);
        }
Beispiel #5
0
        public void TweakedRoundTrip()
        {
            var intValue    = Util.Rnd.Next(500);
            var stringValue = DateTime.Now.ToLongDateString();
            var uriValue    = new Uri("http://testCrazy");

            var values = new Dictionary <string, object>()
            {
                { "IntProperty", intValue },
                { "StringProperty", stringValue },
                { "UriProperty", uriValue }
            };

            var instance = _factory.CreateInstance(values);

            var roundTrip = testRoundTrip(_factory, instance);

            Assert.AreEqual(intValue, roundTrip.IntProperty);
            Assert.AreEqual(stringValue, roundTrip.StringProperty);
            Assert.AreEqual(uriValue, roundTrip.UriProperty);
        }
Beispiel #6
0
        private void btnTest_Click(object sender, EventArgs e)
        {
            var type = Type.GetType(CurrentConfigEntity.Provider);

            if (AssemblyHelper.ValidInterfaceClass(type, false, typeof(IXCIComponentTest)))
            {
                IXCIComponentTest t = (IXCIComponentTest)ConfigFactory.CreateInstance(CurrentConfigEntity);
                t.ShowTestForm(CurrentConfigEntity.Name);
                BindParam();
            }
            else
            {
                MessageBox.Show("不支持");
            }
        }
Beispiel #7
0
        private I AddOrUpdate(I provider, ConfigEntity config)
        {
            if (provider == null)
            {
                provider = (I)ConfigFactory.CreateInstance(config);
            }
            if (string.IsNullOrEmpty(config.Provider))
            {
                config.Provider = AssemblyHelper.GetTypeFullName(provider.GetType());
            }
            string name = config.Name;

            if (InstanceContainer.Count == 0 || config.IsDefault)
            {
                DefaultName = name;
            }
            InstanceContainer[name] = provider;
            ConfigFactory.Current.AddOrUpdateConfig(InterfaceName, config);
            return(provider);
        }
Beispiel #8
0
        private int CreateModuleInstance(ModuleDefinition moduleDef, out ModuleBase moduleInst)
        {
            moduleInst = null;

            // 优先加载ClassName
            string className = moduleDef.ClassName;

            // 如果ClassName不存在,那么根据MetadataID寻找ClassName
            if (string.IsNullOrEmpty(className))
            {
                ModuleMetadata metadata = this.metadataList.FirstOrDefault(info => info.ID == moduleDef.MetadataID);
                if (metadata == null)
                {
                    logger.ErrorFormat("客户端不存在模块:{0}", moduleDef);
                    return(DotNETCode.MODULE_NOT_FOUND);
                }

                className = metadata.ClassName;
            }

            // 开始加载实例
            try
            {
                moduleInst = ConfigFactory <ModuleBase> .CreateInstance(className);

                moduleInst.Definition    = moduleDef;
                moduleInst.Factory       = this;
                moduleInst.PublishEvent += this.ModuleInstance_PublishEvent;

                logger.DebugFormat("加载模块成功, {0}", moduleDef.Name);

                return(DotNETCode.SUCCESS);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("加载模块异常, {0}, {1}", moduleDef, ex);
                return(DotNETCode.UNKNOWN_EXCEPTION);
            }
        }