コード例 #1
0
        private ObservableIndex <PathInfoLight, Ref <IHelperDescriptor <TOptions> >, IEqualityComparer <PathInfoLight> > CreateHelpersSubscription <TOptions>(
            IIndexed <string, IHelperDescriptor <TOptions> > source)
            where TOptions : struct, IHelperOptions
        {
            var equalityComparer = Compatibility.RelaxedHelperNaming ? PathInfoLight.PlainPathComparer : PathInfoLight.PlainPathWithPartsCountComparer;
            var existingHelpers  = source.ToIndexed(
                o => (PathInfoLight)$"[{o.Key}]",
                o => new Ref <IHelperDescriptor <TOptions> >(o.Value),
                equalityComparer
                );

            var target = new ObservableIndex <PathInfoLight, Ref <IHelperDescriptor <TOptions> >, IEqualityComparer <PathInfoLight> >(equalityComparer, existingHelpers);

            var helpersObserver = new ObserverBuilder <ObservableEvent <IHelperDescriptor <TOptions> > >()
                                  .OnEvent <DictionaryAddedObservableEvent <string, IHelperDescriptor <TOptions> > >(
                @event =>
            {
                PathInfoLight key = $"[{@event.Key}]";
                if (target.TryGetValue(key, out var @ref))
                {
                    @ref.Value = @event.Value;
                    return;
                }

                target.AddOrReplace(key, new Ref <IHelperDescriptor <TOptions> >(@event.Value));
            })
                                  .Build();

            source.As <ObservableIndex <string, IHelperDescriptor <TOptions>, StringEqualityComparer> >()?.Subscribe(helpersObserver);

            return(target);
        }
コード例 #2
0
        public HandlebarsConfigurationAdapter(HandlebarsConfiguration configuration)
        {
            UnderlingConfiguration = configuration;

            AliasProviders      = new ObservableList <IMemberAliasProvider>(configuration.AliasProviders);
            HelperResolvers     = new ObservableList <IHelperResolver>(configuration.HelperResolvers);
            RegisteredTemplates = new ObservableIndex <string, HandlebarsTemplate <TextWriter, object, object>, StringEqualityComparer>(new StringEqualityComparer(StringComparison.OrdinalIgnoreCase), configuration.RegisteredTemplates);
            AliasProviders      = new ObservableList <IMemberAliasProvider>(configuration.AliasProviders);
            FormatterProviders  = new ObservableList <IFormatterProvider>
            {
                new DefaultFormatterProvider(),
                new CollectionFormatterProvider(),
                new ReadOnlyCollectionFormatterProvider()
            }.AddMany(configuration.FormatterProviders);

            ObjectDescriptorProviders = CreateObjectDescriptorProvider(UnderlingConfiguration.ObjectDescriptorProviders);
            ExpressionMiddlewares     = new ObservableList <IExpressionMiddleware>(configuration.CompileTimeConfiguration.ExpressionMiddleware)
            {
                new ClosureExpressionMiddleware(),
                new ExpressionOptimizerMiddleware()
            };

            Features = UnderlingConfiguration.CompileTimeConfiguration.Features
                       .Select(o => o.CreateFeature())
                       .OrderBy(o => o.GetType().GetTypeInfo().GetCustomAttribute <FeatureOrderAttribute>()?.Order ?? 100)
                       .ToList();

            Helpers      = CreateHelpersSubscription(configuration.Helpers);
            BlockHelpers = CreateHelpersSubscription(configuration.BlockHelpers);
        }
コード例 #3
0
        public HandlebarsConfiguration()
        {
            var stringEqualityComparer = new StringEqualityComparer(StringComparison.OrdinalIgnoreCase);

            Helpers             = new ObservableIndex <string, IHelperDescriptor <HelperOptions>, StringEqualityComparer>(stringEqualityComparer);
            BlockHelpers        = new ObservableIndex <string, IHelperDescriptor <BlockHelperOptions>, StringEqualityComparer>(stringEqualityComparer);
            RegisteredTemplates = new ObservableIndex <string, HandlebarsTemplate <TextWriter, object, object>, StringEqualityComparer>(stringEqualityComparer);

            HelperResolvers            = new ObservableList <IHelperResolver>();
            TextEncoder                = new HtmlEncoder(FormatProvider);
            UnresolvedBindingFormatter = new Formatter <UndefinedBindingResult>(undef => string.Empty);
        }