mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-16 15:16:34 +01:00
57 lines
2.2 KiB
C#
57 lines
2.2 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
|
|
namespace TINK.Services
|
|
{
|
|
/// <summary> Container of service objects (locks , geolocation, ...) where one service is active. </summary>
|
|
/// <remarks> All service objects must be of different type. </remarks>
|
|
public class ServicesContainerMutable<T>: IEnumerable<T>, INotifyPropertyChanged
|
|
{
|
|
private readonly Dictionary<string, T> serviceDict;
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
/// <summary> Constructs object on startup of app.</summary>
|
|
/// <param name="services">Fixed list of service- objects .</param>
|
|
/// <param name="activeName">LocksService name which is activated on startup of app.</param>
|
|
public ServicesContainerMutable(
|
|
IEnumerable<T> services,
|
|
string activeName)
|
|
{
|
|
serviceDict = services.Distinct().ToDictionary(x => x.GetType().FullName);
|
|
|
|
if (!serviceDict.ContainsKey(activeName))
|
|
{
|
|
throw new ArgumentException($"Can not instantiate {typeof(T).Name}- object. Active lock service {activeName} must be contained in [{String.Join(",", serviceDict)}].");
|
|
}
|
|
|
|
Active = serviceDict[activeName];
|
|
}
|
|
|
|
/// <summary> Active locks service.</summary>
|
|
public T Active { get; private set; }
|
|
|
|
/// <summary> Sets a lock service as active locks service by name. </summary>
|
|
/// <param name="active">Name of the new locks service.</param>
|
|
public void SetActive(string active)
|
|
{
|
|
if (!serviceDict.ContainsKey(active))
|
|
{
|
|
throw new ArgumentException($"Can not set active lock service {active}. Service must be contained in [{String.Join(",", serviceDict)}].");
|
|
}
|
|
|
|
Active = serviceDict[active];
|
|
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Active)));
|
|
}
|
|
|
|
public IEnumerator<T> GetEnumerator()
|
|
=> serviceDict.Values.GetEnumerator();
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
=> serviceDict.Values.GetEnumerator();
|
|
}
|
|
}
|