123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using Vinno.FIS.Sonopost.Managers.Interfaces;
- using Vinno.IUS.Common.Log;
- namespace Vinno.FIS.Sonopost.Managers
- {
- internal class AppManager
- {
- private static bool _initialized;
- private static AppManager _instance;
- private readonly Dictionary<Type, ISonopostManager> _managers = new Dictionary<Type, ISonopostManager>();
- public static AppManager Instance => _instance ?? (_instance = new AppManager());
- /// <summary>
- /// Load language resource files
- /// </summary>
- public void RegisterManager<T>(T instance) where T : ISonopostManager
- {
- var type = typeof(T);
- if (_managers.ContainsKey(type))
- {
- throw new DuplicateNameException($"Type {type.Name} already exists.");
- }
- _managers[type] = instance;
- Logger.WriteLineInfo($"AppManager Manager {type.Name} registerd");
- }
- /// <summary>
- /// Unregister a manager from app manager
- /// </summary>
- private void UnRegisterManager<T>() where T : ISonopostManager
- {
- var type = typeof(T);
- if (!_managers.ContainsKey(type))
- {
- throw new DuplicateNameException($"Type {type} does not exists.");
- }
- _managers[type].Dispose();
- _managers.Remove(type);
- }
- /// <summary>
- /// dispose all managers
- /// </summary>
- public void DisposeAllManagers()
- {
- foreach (var manager in _managers.Reverse())
- {
- try
- {
- Logger.WriteLineInfo($"Disposing - {manager.Key?.Name}");
- manager.Value.Dispose();
- Logger.WriteLineInfo($"Disposed - {manager.Key?.Name}");
- }
- catch (Exception e)
- {
- Logger.WriteLineError($"Dispose Manager {manager.Key} failed, ex: {e}");
- }
- }
- Logger.WriteLineInfo($"AppManager DisposeAllManagers success");
- }
- /// <summary>
- /// Get Manager by specified type
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- public T GetManager<T>() where T : ISonopostManager
- {
- var type = typeof(T);
- if (_managers.ContainsKey(type))
- {
- return (T)_managers[type];
- }
- throw new NullReferenceException($"Can not find instance for type{type}");
- }
- public ISonopostManager GetManager(Type type)
- {
- if (_managers.ContainsKey(type))
- {
- return _managers[type];
- }
- throw new NullReferenceException($"Can not find instance for type{type}");
- }
- /// <summary>
- /// init all managers
- /// </summary>
- public void Initialize()
- {
- if (_initialized)
- {
- Logger.WriteLineInfo("Has been Initialized");
- return;
- }
- RegisterManager<IConfigManager>(new ConfigManager());//must first
- RegisterManager<IKeyBoardListenManager>(new KeyBoardListenManager());
- RegisterManager<IFISManager>(new FISManager());
- RegisterManager<ILoginManager>(new LoginManager());
- RegisterManager<IRemedicalManager>(new RemedicalManager());
- RegisterManager<IAfterSalesManager>(new AfterSalesManager());
- RegisterManager<IDicomServerManager>(new DicomServerManager());
- RegisterManager<ILiveVideoManager>(new LiveVideoManager());
- RegisterManager<IOledManager>(new OledManager());
- RegisterManager<IDeviceManager>(new DeviceManager());
- RegisterManager<INetworkManager>(new NetworkManager());
- RegisterManager<ITestManager>(new TestManager());
- RegisterManager<IVersionCheckManager>(new VersionCheckManager());
- RegisterManager<IExternalMemoryManager>(new ExternalMemoryManager());
- Logger.WriteLineInfo("AppManager RegisterPluginCreators Register end");
- _initialized = true;
- }
- }
- }
|