private void _clockManager_Expired(string providerName) { //set console color to green //Console.ForegroundColor = ConsoleColor.Yellow; //Console.WriteLine($"Module: {providerName}, Expired!"); //get expired item Tuple <object, object[]> oldObject; _modules.TryGetValue(providerName, out oldObject); if (oldObject != null) { //remove items from clock and modules locator _modules.Remove(providerName); _clockManager.Remove(providerName); //create new instance var constructor = oldObject.Item1.GetType().GetTypeInfo().DeclaredConstructors.ToArray()[0]; var parameters = constructor.GetParameters(); //initialize constructor object newObject = null; if (parameters.Length == 1) { newObject = constructor.Invoke(new object[] { oldObject.Item2[0] }); } else if (parameters.Length > 1) { newObject = constructor.Invoke(new object[] { oldObject.Item2 }); } else { newObject = constructor.Invoke(null); } //re-add _modules.Add(providerName, new Tuple <object, object[]>(newObject, oldObject.Item2)); _clockManager.Add(providerName); } }