/// <summary> /// Устанавливает обработчик функций движка /// </summary> /// <param name="dbext">Тип</param> /// <param name="param">Строка подключения</param> /// <returns></returns> public IRabNetDataLayer InitEngine(String dbType, String param) { if (_data != null) { if (_data2 == _data) { _data2 = null; } _data.Close(); if (_data2 != null) { _data2.Close(); } _data = _data2 = null; } _logger.Debug("initing engine data to " + dbType + " param=" + param); if (dbType == "db.mysql") { _data = getDataLayer("db.mysql"); _data2 = _data.Clone(); _data.Init(param); _data2.Init(param); } else { throw new DBDriverNotFoudException(dbType); } int ver = options().getIntOption("db", "version", Options.OPT_LEVEL.FARM); if (ver != NEED_DB_VERSION) { if (_data2 == _data) { _data2 = null; } if (_data != null) { _data.Close(); } if (_data2 != null) { _data2.Close(); } _data = _data2 = null; throw new DBBadVersionException(NEED_DB_VERSION, ver); } return(_data); }
private IRabNetDataLayer getDataLayer(string asmName) { string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, asmName + ".dll"); if (!File.Exists(filePath)) { throw new Exception("MySQL DataLayer dll is not exists"); } ///todo проверка на уже загруженность сборки Assembly Asm = Assembly.LoadFile(filePath);//загружаем Сборку //Type AsmType = Asm.GetType(); foreach (Type AsmType in Asm.GetTypes()) //Проверяем все имеющиеся типы данных (классы) { if (typeof(IRabNetDataLayer).IsAssignableFrom(AsmType)) { IRabNetDataLayer db = (IRabNetDataLayer)Activator.CreateInstance(AsmType); return(db); } } throw new Exception("could not load DataLayer from assembly"); }