tbf/TBF/BenchControl/RegisterReaders/DataStream/MefImport/MefImport.cs

68 lines
2.3 KiB
C#

///
/// 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
{
/// <summary>
/// MEF interface to an external data stream reader component.
/// </summary>
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);
}
}
}
}