/// /// Copyright (c) 2021 Sensus Slovensko a.s. /// using System; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using log4net; using Config.Entities; using DataStreamInterface; namespace TBF.BenchControl.RegisterReaders.DataStream.MefImport { /// /// MEF interface to an external data stream reader component. /// public class MefImport : ComponentBase { private static readonly ILog log = LogManager.GetLogger(typeof(MefImport)); public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); } const Int64 MIN_SAMPLES_COUNT = 20; public Int64 MinSamplesCount { get { return MIN_SAMPLES_COUNT; } } [Import(typeof(IDataStreamMeter))] public IDataStreamMeter DataStreamIFace; readonly MefImportCfg myCfg; public string CatalogDir { get { return myCfg.CatalogDir; } } public MefImport() { } public MefImport(Generic.IComponentCfg cfg) : base(cfg) { myCfg = cfg as MefImportCfg; } public override void Initialize() { if (DebugLevel == DebugMode.Normal) { var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(typeof(DataStreamInterface.IDataStreamMeter).Assembly)); catalog.Catalogs.Add(new DirectoryCatalog(CatalogDir)); (new CompositionContainer(catalog)).ComposeParts(this); log.FatalFormat("{0} initialized: {1}", Name, this); log.FatalFormat(" Meters count = {0}", DataStreamIFace.GetMetersCount()); log.FatalFormat(" Time unit = {0}", DataStreamIFace.GetTimeUnits().ToString()); log.FatalFormat(" Volume unit = {0}", DataStreamIFace.GetVolumeUnits().ToString()); for (int i = 0; i < DataStreamIFace.GetQuantitiesCount(); i++) { log.FatalFormat(" Quantity_{0} = {1}, unit = {2}", i + 1, DataStreamIFace.GetQuantityCaption(i), DataStreamIFace.GetQuantityUnits(i).ToString()); } } else { log.FatalFormat("{0} simulated: {1}", Name, this); } } } }