/// <summary> /// Creates service. /// </summary> /// <param name="assemblyName">Assembly where the service is.</param> /// <param name="type">Service type.</param> /// <returns>Created service.</returns> public static StiService CreateService(string assemblyName, string type) { Assembly a = StiAssemblyFinder.GetAssembly(assemblyName); if (a != null) { lock (AssemblyToTypes) { Type [] typesInAssembly = GetTypesFromAssembly(a); lock (StiTypeFinder.TypeToString) { Type tp = StiTypeFinder.TypeToString[type] as Type; if (tp == null) { foreach (Type fnTp in typesInAssembly) { string fnStr = fnTp.ToString(); if (fnStr == type) { tp = fnTp; StiTypeFinder.TypeToString[type] = fnTp; break; } } } return((StiService)StiActivator.CreateObject(tp)); } } } return(null); }
/// <summary> /// Returns services which are in the specified assembly. /// </summary> /// <param name="assemblyName">Assembly.</param> /// <returns>Services.</returns> public static StiServiceContainer GetServicesFromAssembly(string assemblyName) { Assembly a = StiAssemblyFinder.GetAssembly(assemblyName); if (a == null) { return(new StiServiceContainer()); } return(GetServicesFromAssembly(a)); }
public static ArrayList GetStandardServicesNames() { var list = new ArrayList(); foreach (string assemblyName in standardAssemblies) { var srv = GetServicesNamesFromAssembly(StiAssemblyFinder.GetAssembly(assemblyName)); list.Add(srv); } return(list); }
/// <summary> /// Конвертация потока с XLS-файлом в DataSet, используя другую библиотеку. /// Это позволяет решить проблему открытия файлов без MS BIFF индекса (созданые, например, нашим экспортом). /// </summary> /// <param name="stream">Входной поток с XLS-документом.</param> /// <returns>DataSet с данными.</returns> private static DataSet GetDataSetFromXlsAlternate(Stream stream, bool firstRowIsHeader = true, bool withoutTypes = false) { var dataSet = new DataSet(); var assembly = StiAssemblyFinder.GetAssembly("LibExcel.dll"); var type = assembly.GetType("ExcelLibrary.SpreadSheet.Workbook"); var loadMethod = type.GetMethod("Load", new[] { typeof(Stream) }); var book = loadMethod.Invoke(null, new[] { stream }); var bookWorksheets = book.GetType().GetField("Worksheets").GetValue(book) as IList; foreach (var sheet in bookWorksheets) { var sheetName = sheet.GetType().GetField("Name").GetValue(sheet) as string; var dataTable = new DataTable(sheetName); var sheetCells = sheet.GetType().GetField("Cells").GetValue(sheet); var sheetCellsType = sheetCells.GetType(); var firstColIndex = (int)sheetCellsType.GetField("FirstColIndex").GetValue(sheetCells); var lastColIndex = (int)sheetCellsType.GetField("LastColIndex").GetValue(sheetCells); var firstRowIndex = (int)sheetCellsType.GetField("FirstRowIndex").GetValue(sheetCells); var lastRowIndex = (int)sheetCellsType.GetField("LastRowIndex").GetValue(sheetCells); for (var colIndex = firstColIndex; colIndex <= lastColIndex; colIndex++) { dataTable.Columns.Add(); } for (var rowIndex = firstRowIndex; rowIndex <= lastRowIndex; rowIndex++) { var getRowMethod = sheetCellsType.GetMethod("GetRow", new[] { typeof(int) }); var row = getRowMethod.Invoke(sheetCells, new object[] { rowIndex }); var rowType = row.GetType(); var rowFirstColIndex = (int)rowType.GetField("FirstColIndex").GetValue(row); var rowLastColIndex = (int)rowType.GetField("LastColIndex").GetValue(row); var dataRow = dataTable.NewRow(); for (var colIndex = rowFirstColIndex; colIndex <= rowLastColIndex; colIndex++) { if (colIndex < dataRow.ItemArray.Length) { var getCellMethod = row.GetType().GetMethod("GetCell", new[] { typeof(int) }); var cell = getCellMethod.Invoke(row, new object[] { colIndex }); if (withoutTypes) { dataRow[colIndex] = cell.GetType().GetProperty("StringValue").GetValue(cell, null); } else { dataRow[colIndex] = cell; } } } dataTable.Rows.Add(dataRow); } if (firstRowIsHeader && dataTable.Rows.Count > 0) { var row = dataTable.Rows[0]; foreach (DataColumn column in dataTable.Columns) { try { var rowColumnName = row[column] as string; if (string.IsNullOrWhiteSpace(rowColumnName)) { continue; } var exists = dataTable.Columns[rowColumnName] != null; if (exists) { continue; } column.ColumnName = rowColumnName; } catch { } } dataTable.Rows.RemoveAt(0); } dataSet.Tables.Add(dataTable); } return(dataSet); }