public static async Task <object> GetOrCreateAnalyticWithTickProviderAsync(this Equity equity, Type analyticType, ITickProvider provider, params object[] parameters) { if (!typeof(IAnalyzable).IsAssignableFrom(analyticType)) { throw new ArgumentException($"{analyticType.Name} is not a valid object to create"); } string key = $"{equity.GetHashCode()}#{analyticType.Name}#{string.Join("|", parameters)}#{provider.GetHashCode()}"; if (!_cache.TryGetValue(key, out object output)) { var paramsList = new List <object>(); paramsList.Add(equity); paramsList.AddRange(parameters); var instance = (IAnalyzable)Activator.CreateInstance(analyticType, paramsList.ToArray()); await instance.InitWithTickProviderAsync(provider); output = _cache.Set(key, instance, _policy); } return(output); }