public void AddProvider <T>() where T : IJournalProvider, new() { T obj = new T(); obj.Load(); RegisteredJournalProviders.Add(obj); }
private void ReadAllProviders(bool readFromOnlyCurrentAssembly = false) { RegisteredJournalProviders = Assembly .GetExecutingAssembly() .GetTypes() .Where(m => m.GetInterfaces().Contains(typeof(IJournalProvider))) .Select(m => m.GetConstructor(Type.EmptyTypes).Invoke(null) as IJournalProvider) .ToList(); if (!readFromOnlyCurrentAssembly) { var files = Directory.GetFiles("plugins\\log\\providers\\", "*.dll"); if (files.Length <= 0) { return; } foreach (var file in files) { try { var assembly = Assembly.LoadFile(file); if (assembly != null) { var providers = assembly.GetTypes().Where((x) => x.GetInterfaces().Contains(typeof(IJournalProvider))) .Select((x) => x.GetConstructor(Type.EmptyTypes)?.Invoke(null) as IJournalProvider) .ToList(); foreach (var provider in providers) { RegisteredJournalProviders.Add(provider); } } } catch { } // ignore } } foreach (var item in RegisteredJournalProviders) { item.Load(); } }
public T GetProviderByType <T>() where T : IJournalProvider => (T)RegisteredJournalProviders.FirstOrDefault((x) => x.GetType() == typeof(T));
public void ImmediateWriteAll(object what, JournalingLevel level) => RegisteredJournalProviders.ForEach((x) => x.ImmediateWrite(what, level));
public List <IJournalProvider> GetProviders() => RegisteredJournalProviders.ToList();