Don't use reflection to instantiate driver
This commit is contained in:
@@ -73,32 +73,14 @@ namespace TestApp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void UpdateDriverSettings(Settings settings) {
|
private static void UpdateDriverSettings(Settings settings) {
|
||||||
var dirverName = settings.ChargerDriver ?? Settings.DEFAULT_CHARGER_DRIVER;
|
var driverName = settings.ChargerDriver ?? Settings.DEFAULT_CHARGER_DRIVER;
|
||||||
|
|
||||||
var sampleDriverType = typeof(VestelEvc04);
|
if (_Driver is null || !IsDriver(_Driver, driverName))
|
||||||
var dirverNameSpace = sampleDriverType.Namespace;
|
|
||||||
var fullDriverTypeName = dirverNameSpace + "." + dirverName;
|
|
||||||
var driverType = sampleDriverType.Assembly.GetType(fullDriverTypeName);
|
|
||||||
if (driverType is null)
|
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"Charger driver type '{dirverName}' not found!");
|
var newDriver = CreateDriver(driverName);
|
||||||
}
|
if (newDriver is null)
|
||||||
|
|
||||||
if (_Driver is null || !_Driver.GetType().Equals(driverType))
|
|
||||||
{
|
{
|
||||||
var newDriverConstructor = driverType.GetConstructor(Array.Empty<Type>());
|
throw new InvalidOperationException($"New driver {driverName} could not be found!");
|
||||||
if (newDriverConstructor is null) {
|
|
||||||
throw new InvalidOperationException($"Type {driverType} does not have a parameterless constructor!");
|
|
||||||
}
|
|
||||||
|
|
||||||
var newDriverObject = newDriverConstructor.Invoke(null, Array.Empty<object>());
|
|
||||||
if (newDriverObject is null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Could not instantiate driver!");
|
|
||||||
}
|
|
||||||
if (newDriverObject is not IChargerDriver newDriver)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("New driver does not implement IChargerDriver!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_Driver is IDisposable disposable)
|
if (_Driver is IDisposable disposable)
|
||||||
@@ -111,5 +93,21 @@ namespace TestApp
|
|||||||
_Driver.HostAddress = settings.ChargerAddress ?? Settings.DEFAULT_CHARGER_ADDRESS;
|
_Driver.HostAddress = settings.ChargerAddress ?? Settings.DEFAULT_CHARGER_ADDRESS;
|
||||||
_Driver.Port = settings.ChargerPort ?? Settings.DEFAULT_CHARGER_PORT;
|
_Driver.Port = settings.ChargerPort ?? Settings.DEFAULT_CHARGER_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsDriver(IChargerDriver dirver, string name) {
|
||||||
|
return name switch
|
||||||
|
{
|
||||||
|
"VestelEvc04" => dirver is VestelEvc04,
|
||||||
|
_ => false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IChargerDriver? CreateDriver(string name) {
|
||||||
|
return name switch
|
||||||
|
{
|
||||||
|
"VestelEvc04" => new VestelEvc04(),
|
||||||
|
_ => null
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user