コード例 #1
0
ファイル: MenuService.cs プロジェクト: rsdn/janus
		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);
		}
コード例 #2
0
ファイル: StatsFormatterManager.cs プロジェクト: rsdn/janus
		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);
		}
コード例 #3
0
ファイル: DBDriverManager.cs プロジェクト: rsdn/janus
		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);
		}
コード例 #4
0
        /// <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;
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
 /// <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);
 }
コード例 #7
0
        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));
        }