public MenuService([NotNull] IServiceProvider serviceProvider) { if (serviceProvider == null) throw new ArgumentNullException(nameof(serviceProvider)); var menuProviders = new ExtensionsCache<MenuProviderInfo, IMenuProvider>(serviceProvider); _menuProvidersLookup = menuProviders .GetAllExtensions() .ToLookup( menuProvider => menuProvider.MenuName, StringComparer.OrdinalIgnoreCase); // WTF? //menuProviders // .GetAllExtensions() // .OfType<IDynamicMenuProvider>() // .Select( // dynamicMenuProvider => // { // _menuCache.Drop(dynamicMenuProvider.MenuName); // return // dynamicMenuProvider.MenuChanged.Subscribe( // arg => _menuChanged.OnNext(dynamicMenuProvider.MenuName)); // }); _menuCache = LazyDictionary.Create<string, IMenuRoot>(CreateMenu, false); }
public StatsFormatterManager(IServiceProvider provider) { _formatters = LazyDictionary.Create<string, IStatisticsFormatter>( name => { var regSvc = provider.GetService<RegSvc>(); if (regSvc == null || !regSvc.ContainsElement(name)) return new DefaultFormatter(name); return (IStatisticsFormatter)regSvc.GetElement(name).Type.CreateInstance(provider); }, true); }
public DBDriverManager(IServiceProvider provider) { _provider = provider; _cache = LazyDictionary.Create<string, IDBDriver>( name => { var svc = _provider.GetService<DriverSvc>(); if (svc == null || !svc.ContainsElement(name)) throw new ArgumentException($"Unknown driver '{name}'"); return (IDBDriver)svc.GetElement(name).Type.CreateInstance(_provider); }, true); }
/// <summary> /// Инициализирует экземпляр поставщиком данных конфигурации. /// </summary> public ConfigService( IEnumerable <ConfigSectionInfo> sectionInfos, IConfigDataProvider dataProvider, IDictionary <string, string> externalVars) { if (sectionInfos == null) { throw new ArgumentNullException(nameof(sectionInfos)); } _sectionInfos = sectionInfos.ToDictionary(info => info.ContractType); _serializer = new ConfigSerializer(dataProvider, externalVars); _sections = LazyDictionary.Create <ConfigSectionInfo, object>(DeserializeSection, true); _serializer.ConfigChanged += SerializerConfigChanged; }
/// <summary> /// Инициализирует экземпляр. /// </summary> public ServiceDataManager(string dataFolder) { if (dataFolder == null) { throw new ArgumentNullException(nameof(dataFolder)); } if (!Directory.Exists(dataFolder)) { Directory.CreateDirectory(dataFolder); } _dataFolder = dataFolder; _notificationConsumer = new ChangeNotificationConsumer(this); _instances = LazyDictionary.Create <Type, object>(CreateNewInstance, true); }
/// <summary> /// Initialize instance. /// </summary> public ExtensionsCache( [NotNull] IServiceProvider provider, [CanBeNull] Func <TInfo, TElement> instanceCreator) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } _provider = provider; _customParams = Array <InstancingCustomParam> .Empty; _cache = LazyDictionary.Create( instanceCreator == null ? (Func <TKey, TElement>)CreateByHelper : key => CreateByCreator(instanceCreator, key), true); }
public override int Serialize(ref byte[] bytes, int offset, ILazyDictionary <TKey, TValue> value) { if (value == null) { BinaryUtil.WriteInt32(ref bytes, offset, -1); return(4); } var dictionary = value as DictionarySegment <TKey, TValue>; if (dictionary == null) { dictionary = new DictionarySegment <TKey, TValue>(new DirtyTracker(offset), value.Count); foreach (var item in value) { dictionary.Add(item.Key, item.Value); } } return(dictionary.Serialize(ref bytes, offset)); }