示例#1
0
文件: ORMTest.cs 项目: S031/MetaStack
        private void CreateTypesListSpeedTest()
        {
            using (FileLog _logger = typeof(FileLog).CreateInstance <FileLog>(new object[]
                                                                              { "ORMSchemaTest", new FileLogSettings()
                                                                                {
                                                                                    DateFolderMask = "yyyy-MM-dd"
                                                                                } }))
            {
                _logger.Debug("List implements IDataReader");
                ImplementsList.Add(typeof(IDataReader));
                foreach (var s in ImplementsList.GetTypes(typeof(IDataReader)))
                {
                    _logger.Debug(s.FullName);
                }

                _logger.Debug("Start speed test for find implements IDataReader");
                for (int i = 0; i < 1000000; i++)
                {
                    var l = ImplementsList.GetTypes(typeof(IDataReader)).ToArray();
                }
                //ImplementsList.Add(typeof(IDataReader));
                //foreach (var s in ImplementsList.GetTypes(typeof(IDataReader)))
                //	_logger.Debug(s.FullName);

                //_logger.Debug("Start speed test for find implements IDataReader");
                //for (int i = 0; i < 1000000; i++)
                //{
                //	var l = ImplementsList.GetTypes(typeof(IDataReader)).ToArray();
                //}
                _logger.Debug("Finish speed test");
            }
        }
示例#2
0
        public JMXSchemaProviderDB(string connectionString, ILogger logger)
        {
            connectionString.NullTest(nameof(connectionString));
            logger.NullTest(nameof(logger));
            _logger     = logger;
            _isLocalLog = false;
            _cn         = connectionString;
            string dbProviderName = new ConnectInfo(connectionString).ProviderName;

            if (_counter == 0)
            {
                ImplementsList.Add(typeof(ISchemaDBSync));
            }

            _syncronizer = GetSyncronizer(dbProviderName);
            _syncronizer.SchemaProvider = this;
            _syncronizer.Logger         = logger;
            if (_counter == 0)
            {
                using (var mdb = new MdbContext(_cn))
                {
                    if (!_syncronizer.TestSysCatAsync(mdb).GetAwaiter().GetResult())
                    {
                        _syncronizer.CreateDbSchemaAsync(mdb).GetAwaiter().GetResult();
                    }
                    _defaultDbSchema = _syncronizer.GetDefaultDbSchemaAsync(mdb).GetAwaiter().GetResult();
                    Interlocked.Increment(ref _counter);
                }
            }
        }
示例#3
0
        private static IAppEvaluator CreateEvaluator(ActionInfo ai, DataPackage inParamStor)
        {
            var inParams = ai.InterfaceParameters.Where(kvp => kvp.Value.Dirrect == ParamDirrect.Input && kvp.Value.Required).Select(kvp => kvp.Value);
            int pCount   = inParams.Count();

            if (inParamStor != null)
            {
                inParamStor.GoDataTop();
            }
            if (pCount > 0 && (inParamStor == null || inParamStor.FieldCount < pCount || !inParamStor.Read()))
            {
                throw new InvalidOperationException(
                          Strings.S031_MetaStack_Core_Actions_CreateEvaluator_2
                          .ToFormat(ai.ActionID, ai.InterfaceID));
            }
            else if (pCount > 0)
            {
                foreach (ParamInfo pi in inParams)
                {
                    try
                    {
                        var val = inParamStor[pi.ParameterID];
                    }
                    catch
                    {
                        throw new InvalidOperationException(
                                  Strings.S031_MetaStack_Core_Actions_CreateEvaluator_1
                                  .ToFormat(ai.InterfaceID, pi.ParameterID, ai.ActionID));
                    }
                }
                inParamStor.GoDataTop();
            }

            if (!_loadedTypesCache.TryGetValue(ai.ClassName, out Type type))
            {
                var a = LoadAssembly(ai.AssemblyID);
                ImplementsList.Add(typeof(IAppEvaluator), a);
                type = ImplementsList.GetTypes(typeof(IAppEvaluator))
                       .FirstOrDefault(t => t.FullName.Equals(ai.ClassName, StringComparison.Ordinal));
                _loadedTypesCache.TryAdd(ai.ClassName, type);
            }
            return(type.CreateInstance <IAppEvaluator>());
        }
示例#4
0
        private static ISchemaDBSync GetSyncronizer(string dbProviderName)
        {
            var l = ImplementsList.GetTypes(typeof(ISchemaDBSync));

            if (l == null)
            {
                throw new InvalidOperationException("No class inherited from ISchemaDBSync defined");
            }
            foreach (var t in l)
            {
                SchemaDBSyncAttribute att = (System.Attribute.GetCustomAttributes(t)?
                                             .FirstOrDefault(attr => attr.GetType() == typeof(SchemaDBSyncAttribute) &&
                                                             (attr as SchemaDBSyncAttribute)?.DBProviderName == dbProviderName) as SchemaDBSyncAttribute);
                if (att != null)
                {
                    return((ISchemaDBSync)t.CreateInstance());
                }
            }
            throw new InvalidOperationException("No class inherited from ISchemaDBSync contained attribute of type SchemaDBSyncAttribute  defined");
        }
示例#5
0
        private static JMXFactory CreateFactoryFromMdbContext(IServiceProvider services, MdbContext mdb)
        {
            var l = ImplementsList.GetTypes(typeof(JMXFactory));

            if (l == null)
            {
                //No class inherited from JMXFactory defined
                throw new InvalidOperationException(Strings.S031_MetaStack_Core_ORM_JMXFactory_Create_1);
            }

            string     dbProviderName = mdb.ProviderName;
            JMXFactory factory        = null;

            foreach (var t in l)
            {
                if (System.Attribute.GetCustomAttributes(t)?
                    .FirstOrDefault(attr => attr.GetType() == typeof(DBRefAttribute) &&
                                    (attr as DBRefAttribute)
                                    .DBProviderName
                                    .Equals(dbProviderName, StringComparison.OrdinalIgnoreCase)) is DBRefAttribute att)
                {
                    factory = (JMXFactory)t.CreateInstance(mdb);
                    break;
                }
            }
            if (factory == null)
            {
                //No class inherited from JMXFactory contained attribute of type DBRefAttribute  defined
                throw new InvalidOperationException(Properties.Strings.S031_MetaStack_Core_ORM_JMXFactory_Create_2);
            }
            factory._services = services;
            factory._mdb      = mdb;
            factory._logger   = services
                                .GetRequiredService <ILoggerProvider>()
                                .CreateLogger(typeof(JMXFactory).FullName);
            return(factory);
        }
 public static T GetProvider <T>(params object[] ctorArgs) where T : class, IJMXSchemaProvider
 {
     return(ImplementsList.GetTypes(typeof(IJMXSchemaProvider))?
            .FirstOrDefault(t => t.Equals(typeof(T)))?.CreateInstance <T>(ctorArgs));
 }
 public static void RegisterProvider <T>() where T : class, IJMXSchemaProvider
 {
     ImplementsList.Add(typeof(IJMXSchemaProvider));
 }
示例#8
0
 public IEnumerable <IDataCache <TKey, TValue> > GetCache <TKey, TValue>()
 => ImplementsList.GetTypes(typeof(IDataCache <TKey, TValue>))
 .Select(t => t.CreateInstance <IDataCache <TKey, TValue> >());