From e5b20210003acd65de21037aef9f7afb946e50e8 Mon Sep 17 00:00:00 2001 From: Chris Hannon Date: Sun, 28 Jan 2024 15:28:04 -0700 Subject: [PATCH] Fixed defaulting of feature repository --- GrowthBook/GrowthBook.cs | 28 ++++++++++++------- .../Providers/ConditionEvaluationProvider.cs | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/GrowthBook/GrowthBook.cs b/GrowthBook/GrowthBook.cs index 48afa24..6b8c1cf 100644 --- a/GrowthBook/GrowthBook.cs +++ b/GrowthBook/GrowthBook.cs @@ -59,24 +59,32 @@ public GrowthBook(Context context) PreferServerSentEvents = true }; - var featureCache = new InMemoryFeatureCache(cacheExpirationInSeconds: 60); - var httpClientFactory = new HttpClientFactory(requestTimeoutInSeconds: 60); - // If they didn't want to include a logger factory, just create a basic one that will // create disabled loggers by default so we don't force a particular logging provider // or logs on the user if they chose the defaults. var loggerFactory = context.LoggerFactory ?? LoggerFactory.Create(builder => { }); - - var conditionEvaluatorLogger = loggerFactory.CreateLogger(); - var featureRefreshLogger = loggerFactory.CreateLogger(); - var featureRepositoryLogger = loggerFactory.CreateLogger(); _logger = loggerFactory.CreateLogger(); - - var featureRefreshWorker = new FeatureRefreshWorker(featureRefreshLogger, httpClientFactory, config, featureCache); + var conditionEvaluatorLogger = loggerFactory.CreateLogger(); _conditionEvaluator = new ConditionEvaluationProvider(conditionEvaluatorLogger); - _featureRepository = new FeatureRepository(featureRepositoryLogger, featureCache, featureRefreshWorker); + + if (context.FeatureRepository != null) + { + _featureRepository = context.FeatureRepository; + } + else + { + var featureCache = new InMemoryFeatureCache(cacheExpirationInSeconds: 60); + var httpClientFactory = new HttpClientFactory(requestTimeoutInSeconds: 60); + + var featureRefreshLogger = loggerFactory.CreateLogger(); + var featureRepositoryLogger = loggerFactory.CreateLogger(); + + var featureRefreshWorker = new FeatureRefreshWorker(featureRefreshLogger, httpClientFactory, config, featureCache); + + _featureRepository = new FeatureRepository(featureRepositoryLogger, featureCache, featureRefreshWorker); + } } /// diff --git a/GrowthBook/Providers/ConditionEvaluationProvider.cs b/GrowthBook/Providers/ConditionEvaluationProvider.cs index 6723e0e..18c89ef 100644 --- a/GrowthBook/Providers/ConditionEvaluationProvider.cs +++ b/GrowthBook/Providers/ConditionEvaluationProvider.cs @@ -140,7 +140,7 @@ private bool EvalConditionValue(JToken conditionValue, JToken attributeValue) /// True if attributeValue is an array and at least one of the array items matches the condition. private bool ElemMatch(JObject condition, JToken attributeValue) { - if (attributeValue.Type != JTokenType.Array) + if (attributeValue?.Type != JTokenType.Array) { _logger.LogDebug($"Unable to match array elements with a non-array type of '{attributeValue.Type}'"); return false;