using Bro.Common.Interface; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Bro.Common.Helper { public class StationFactory { /// /// 获取StationProcess /// /// 站点编号 S1~S7 /// 登录用户名称 /// 异常信息 /// public static IStationProcess CreateStationProcess(string stationCode, string userName, out string msg) { IStationProcess proc = null; msg = ""; try { var assList = AppDomain.CurrentDomain.GetAssemblies().ToList(); var assNameList = assList.Select(a => a.GetName()).ToList(); Assembly ass = assList.FirstOrDefault(a => a.GetName().Name.Contains("Bro.Device.Station")); if (ass == null) { ass = Assembly.LoadFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Bro.Device.Station.dll")); } ass.GetReferencedAssemblies().ToList().ForEach(a => { if (!assNameList.Contains(a)) Assembly.Load(a); }); ass.GetTypes().ToList().ForEach(t => { if (typeof(IStationProcess).IsAssignableFrom(t)) { var attr = t.GetCustomAttribute(); if (attr != null && attr.StationCode == stationCode) { //proc = (Activator.CreateInstance(t, userName) as IStationProcess).GetInstance(); proc = Activator.CreateInstance(t, userName) as IStationProcess; return; } } }); } catch (Exception ex) { msg = ex.GetExceptionMessage(); } return proc; } /// /// 获取StationConfig /// /// 站点编号 S1~S7 /// 异常信息 /// public static IStationConfig CreateStationConfig(string stationCode, out string msg) { IStationConfig config = null; msg = ""; try { Assembly ass = Assembly.LoadFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Bro.Device.Station.dll")); ass.GetReferencedAssemblies().ToList().ForEach(a => { Assembly.Load(a); }); ass.GetTypes().ToList().ForEach(t => { if (typeof(IStationConfig).IsAssignableFrom(t)) { var attr = t.GetCustomAttribute(); if (attr != null && attr.StationCode == stationCode) { config = Activator.CreateInstance(t) as IStationConfig; return; } } }); } catch (Exception ex) { msg = ex.GetExceptionMessage(); } return config; } } }