using HStation.RevitDev.RevitDataExport.Parser; using HStation.RevitDev.RevitDataExport.Utils; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace HStation.RevitDev.RevitDataExport.Utility { public class ParserManager : Singleton { private List _parsers; public List Parsers { get { if (_parsers == null) { _parsers = CreateParsers(); } return _parsers; } } private List CreateParsers() { var parsers = new List(); // 加载程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 程序集扫描,获取全部规则检查者信息 var allType = assembly.GetTypes().ToList(); var types = allType.FindAll(type => type.IsSubclassOf(typeof(BaseParser))); if (types == null || types.Count() == 0) { return parsers; } foreach (Type type in types) { var instance = Activator.CreateInstance(type) as BaseParser; parsers.Add(instance); } return parsers; } public BaseParser GetParser(string parserName) { foreach (var parser in _parsers) { if (parser.GetParserName().Equals(parserName)) { return parser; } } return null; } } }