public NavigationPageFactoryService([NotNull] IServiceProvider serviceProvider)
		{
			if (serviceProvider == null)
				throw new ArgumentNullException(nameof(serviceProvider));

			_providerHierarchy = CreatePageProvidersHierachy(CreatePageProviders(serviceProvider));
		}
Example #2
0
        public NavigationPageFactoryService([NotNull] IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }

            _providerHierarchy = CreatePageProvidersHierachy(CreatePageProviders(serviceProvider));
        }
Example #3
0
        private static NavigationPageProviderHierarchy CreatePageProvidersHierachy(
            IEnumerable <Pair <INavigationPageProvider, string> > providersWithMasks)
        {
            var result = new NavigationPageProviderHierarchy();

            foreach (var providerWithMask in providersWithMasks)
            {
                result.Add(providerWithMask.Second.Split('/'), providerWithMask.First);
            }
            return(result);
        }
Example #4
0
            private void CreateNodes(
                IEnumerable <string> path,
                INavigationPageProvider provider)
            {
                var pathComponent = path.FirstOrDefault();

                switch (pathComponent)
                {
                case null:
                    if (Provider != null)
                    {
                        throw new ApplicationException(
                                  "Провайдер страниц навигации с данной маской уже существует.");
                    }
                    Provider = provider;
                    break;

                case "*":
                    if (path.Skip(1).Any())
                    {
                        throw new ApplicationException(
                                  "Компонент маски пути '*' поддерживается только в качестве последнего элемента пути.");
                    }
                    if (ChildrensProvider != null)
                    {
                        throw new ApplicationException(
                                  "Провайдер страниц навигации с данной маской уже существует.");
                    }
                    ChildrensProvider = provider;
                    break;

                default:
                    var subNode = new NavigationPageProviderHierarchy();
                    _childrens.Add(pathComponent, subNode);
                    subNode.CreateNodes(path.Skip(1), provider);
                    break;
                }
            }
			private void CreateNodes(
				IEnumerable<string> path,
				INavigationPageProvider provider)
			{
				var pathArray = path.ToArray();
				var pathComponent = pathArray.FirstOrDefault();
				switch (pathComponent)
				{
					case null:
						if (Provider != null)
							throw new ApplicationException(
								"Провайдер страниц навигации с данной маской уже существует.");
						Provider = provider;
						break;
					case "*":
						if (pathArray.Skip(1).Any())
							throw new ApplicationException(
								"Компонент маски пути '*' поддерживается только в качестве последнего элемента пути.");
						if (ChildrensProvider != null)
							throw new ApplicationException(
								"Провайдер страниц навигации с данной маской уже существует.");
						ChildrensProvider = provider;
						break;
					default:
						var subNode = new NavigationPageProviderHierarchy();
						Debug.Assert(pathComponent != null, "pathComponent != null");
						_childrens.Add(pathComponent, subNode);
						subNode.CreateNodes(pathArray.Skip(1), provider);
						break;
				}
			}
		private static NavigationPageProviderHierarchy CreatePageProvidersHierachy(
			IEnumerable<Tuple<INavigationPageProvider, string>> providersWithMasks)
		{
			var result = new NavigationPageProviderHierarchy();
			foreach (var providerWithMask in providersWithMasks)
				result.Add(providerWithMask.Item2.Split('/'), providerWithMask.Item1);
			return result;
		}