Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        public static ArrayList GetStandardServicesNames()
        {
            var list = new ArrayList();

            foreach (string assemblyName in standardAssemblies)
            {
                var srv = GetServicesNamesFromAssembly(StiAssemblyFinder.GetAssembly(assemblyName));
                list.Add(srv);
            }

            return(list);
        }
Exemple #4
0
        /// <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);
        }