public static void ExpireSetting(ObjectSettingEntry settingEntry)
 {
     if (settingEntry != null && _settingsRegionTokenLookup.TryRemove(settingEntry.GetCacheKey(), out var token))
     {
         token.Cancel();
     }
 }
Esempio n. 2
0
 public static void ExpireSetting(ObjectSettingEntry settingEntry)
 {
     if (_settingsRegionTokenLookup.TryRemove(settingEntry, out CancellationTokenSource token))
     {
         token.Cancel();
     }
 }
Esempio n. 3
0
        public virtual ObjectSettingEntry ToModel(ObjectSettingEntry objSetting)
        {
            if (objSetting == null)
            {
                throw new ArgumentNullException(nameof(objSetting));
            }
            objSetting.Name       = Name;
            objSetting.ObjectType = ObjectType;
            objSetting.ObjectId   = ObjectId;
            var values = SettingValues.Select(x => x.GetValue()).ToArray();

            if (objSetting.IsDictionary)
            {
                objSetting.AllowedValues = values;
            }
            else
            {
                objSetting.Value = values.FirstOrDefault();
            }

            if (objSetting.AllowedValues.IsNullOrEmpty() && objSetting.DefaultValue != null)
            {
                objSetting.AllowedValues = new object[] { objSetting.DefaultValue };
            }

            return(objSetting);
        }
Esempio n. 4
0
 public static IChangeToken CreateChangeToken(ObjectSettingEntry settingEntry)
 {
     if (settingEntry == null)
     {
         throw new ArgumentNullException(nameof(settingEntry));
     }
     return(CreateChangeTokenForKey(settingEntry.GetCacheKey()));
 }
        public static IChangeToken CreateChangeToken(ObjectSettingEntry settingEntry)
        {
            if (settingEntry == null)
            {
                throw new ArgumentNullException(nameof(settingEntry));
            }
            var cancellationTokenSource = _settingsRegionTokenLookup.GetOrAdd(settingEntry.GetCacheKey(), new CancellationTokenSource());

            return(new CompositeChangeToken(new[] { CreateChangeToken(), new CancellationChangeToken(cancellationTokenSource.Token) }));
        }
        public virtual async Task <IEnumerable <ObjectSettingEntry> > GetObjectSettingsAsync(IEnumerable <string> names, string objectType = null, string objectId = null)
        {
            if (names == null)
            {
                throw new ArgumentNullException(nameof(names));
            }
            var cacheKey = CacheKey.With(GetType(), "GetSettingByNamesAsync", string.Join(";", names), objectType, objectId);
            var result   = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var resultObjectSettings = new List <ObjectSettingEntry>();
                var dbStoredSettings     = new List <SettingEntity>();

                //Try to load setting value from DB
                using (var repository = _repositoryFactory())
                {
                    repository.DisableChangesTracking();
                    //try to load setting from db
                    dbStoredSettings.AddRange(await repository.GetObjectSettingsByNamesAsync(names.ToArray(), objectType, objectId));
                }

                foreach (var name in names)
                {
                    var settingDescriptor = _registeredSettingsByNameDict[name];
                    if (settingDescriptor == null)
                    {
                        throw new PlatformException($"Setting with name {name} is not registered");
                    }
                    var objectSetting = new ObjectSettingEntry(settingDescriptor)
                    {
                        ObjectType = objectType,
                        ObjectId   = objectId
                    };
                    var dbSetting = dbStoredSettings.FirstOrDefault(x => x.Name.EqualsInvariant(name));
                    if (dbSetting != null)
                    {
                        objectSetting = dbSetting.ToModel(objectSetting);
                    }
                    resultObjectSettings.Add(objectSetting);

                    //Add cache  expiration token for setting
                    cacheEntry.AddExpirationToken(SettingsCacheRegion.CreateChangeToken(objectSetting));
                }
                return(resultObjectSettings);
            });

            return(result);
        }
Esempio n. 7
0
 public virtual SettingEntity FromModel(ObjectSettingEntry objectSettingEntry)
 {
     if (objectSettingEntry == null)
     {
         throw new ArgumentNullException(nameof(objectSettingEntry));
     }
     ObjectType = objectSettingEntry.ObjectType;
     ObjectId   = objectSettingEntry.ObjectId;
     Name       = objectSettingEntry.Name;
     if (objectSettingEntry.IsDictionary)
     {
         SettingValues = new ObservableCollection <SettingValueEntity>(objectSettingEntry.AllowedValues.Select(x => new SettingValueEntity {
         }.SetValue(objectSettingEntry.ValueType, x)));
     }
     else
     {
         SettingValues = new ObservableCollection <SettingValueEntity>(new[] { new SettingValueEntity {
                                                                               }.SetValue(objectSettingEntry.ValueType, objectSettingEntry.Value) });
     }
     return(this);
 }
Esempio n. 8
0
        public virtual ObjectSettingEntry ToModel(ObjectSettingEntry objSetting)
        {
            if (objSetting == null)
            {
                throw new ArgumentNullException(nameof(objSetting));
            }
            // Don't set name to avoid overwriting with db-readed value (it can be misswritten)
            objSetting.ObjectType = ObjectType;
            objSetting.ObjectId   = ObjectId;
            var values = SettingValues.Select(x => x.GetValue()).ToArray();

            if (objSetting.IsDictionary)
            {
                objSetting.AllowedValues = values;
            }
            else
            {
                objSetting.Value = values.FirstOrDefault();
            }

            return(objSetting);
        }
Esempio n. 9
0
 public static void ExpireSetting(ObjectSettingEntry settingEntry)
 {
     ExpireTokenForKey(settingEntry.GetCacheKey());
 }