Exemplo n.º 1
0
 public TargetingMiddleware(RequestDelegate next,
                            ServiceSetConfigurator <ITargetingProvider> p,
                            ServiceSetConfigurator <ITargetingProviderAsync> p2)
 {
     _next = next;
     _targetingConfigurationBuilder         = p;
     _targetingConfigurationBuilderForAsync = p2;
 }
Exemplo n.º 2
0
 public CacheTrackersAccessor(ServiceSetConfigurator <ICacheTagTracker> cfg, IServiceProvider sp)
 {
     _cfg = cfg;
     _sp  = sp;
 }
        /// <summary>
        /// Конфигурация движка структуры сайта: сервисы для построения структуры сайта
        /// + сервисы необходимые для интеграции структуры сайта с MVC (контроллерами и viewcomponent)
        /// </summary>
        /// <param name="services"></param>
        /// <param name="setupAction"></param>
        public SiteStructureEngineConfigurator(IServiceCollection services, Action <SiteStructureEngineOptions> setupAction)
        {
            Services = services;

            var options = new SiteStructureEngineOptions();

            setupAction?.Invoke(options);

            ConfigureGeneralServices(options);

            services.AddSingleton(new UrlTokenConfig
            {
                DefaultTailPattern        = options.DefaultUrlTailPattern,
                TailPatternsByControllers = options.UrlTailPatternsByControllers,
                HeadPatterns = options.UrlHeadPatterns ?? new List <HeadUrlMatchingPattern> {
                    new HeadUrlMatchingPattern {
                        Pattern = "/"
                    }
                }
            });


            services.TryAddScoped <IAbstractItemFactory, AbstractItemFactory>();
            services.TryAddSingleton <ITargetingFilterAccessor, NullTargetingFilterAccessor>();
            services.TryAddSingleton <ITargetingContext, NullTargetingContext>();

            services.TryAddSingleton <ITailUrlResolver, TailUrlResolver>();

            var headTokenPossibleConfigurator = new ServiceSetConfigurator <IHeadTokenPossibleValuesProvider>();

            foreach (var t in options.HeadTokenPossibleValuesProviders)
            {
                headTokenPossibleConfigurator.Register(t);
            }
            services.TryAddSingleton(headTokenPossibleConfigurator);
            services.TryAddSingleton <IHeadTokenPossibleValuesAccessor, HeadTokenPossibleValuesAccessor>();
            services.TryAddSingleton <IHeadUrlResolver, HeadUrlResolver>();

            services.TryAddSingleton <ITargetingUrlTransformator, TargetingUrlTransformator>();
            services.TryAddSingleton <UrlTokenTargetingProvider>();

#if NETCOREAPP3_1
            services.TryAddSingleton <SiteStructureRouteValueTransformer>();
#endif
            services.TryAdd(new ServiceDescriptor(typeof(ITypeFinder), provider => options.TypeFinder, ServiceLifetime.Singleton));

            if (options.ItemDefinitionConvention == ItemDefinitionConvention.Name)
            {
                services.TryAddScoped <IItemDefinitionProvider, NameConventionalItemDefinitionProvider>();
            }
            else if (options.ItemDefinitionConvention == ItemDefinitionConvention.Attribute)
            {
                throw new NotImplementedException("AttributeConventionalItemDefinitionProvider not implemented yet");
            }

            if (options.ControllerMapperConvention == ControllerMapperConvention.Name)
            {
                services.TryAddSingleton <IControllerMapper, NameConventionalControllerMapper>();
            }
            else if (options.ControllerMapperConvention == ControllerMapperConvention.Attribute)
            {
                services.TryAddSingleton <IControllerMapper, AttributeConventionalControllerMapper>();
            }

            if (options.ComponentMapperConvention == ComponentMapperConvention.Name)
            {
                services.TryAddSingleton <IComponentMapper, NameConventionalComponentMapper>();
            }
            else if (options.ComponentMapperConvention == ComponentMapperConvention.Attribute)
            {
                services.TryAddSingleton <IComponentMapper, AttributeConventionalComponentMapper>();
            }

            //декорируем дефолтный MVC-ный IViewComponentInvokerFactory собственной реализацией
            //для возможности рендеринга виджетов как viewcomponent
            //вынуждены делать это с использованием reflection, т.к. дефолтная реализация стала internal
            var defaultViewComponentInvokerFactoryType = typeof(IViewComponentInvokerFactory).Assembly.GetType("Microsoft.AspNetCore.Mvc.ViewComponents.DefaultViewComponentInvokerFactory");
            services.AddScoped(defaultViewComponentInvokerFactoryType);
            services.AddScoped <IViewComponentInvokerFactory>(provider =>
                                                              new WidgetViewComponentInvokerFactory((IViewComponentInvokerFactory)provider.GetRequiredService(defaultViewComponentInvokerFactoryType)));
        }
Exemplo n.º 4
0
 public TargetingFilterAccessor(ServiceSetConfigurator <ITargetingFilter> cfg, IHttpContextAccessor httpContextAccessor)
 {
     _cfg = cfg;
     _httpContextAccessor = httpContextAccessor;
 }
Exemplo n.º 5
0
 public HeadTokenPossibleValuesAccessor(ServiceSetConfigurator <IHeadTokenPossibleValuesProvider> registeredProviders,
                                        IHttpContextAccessor httpContextAccessor)
 {
     _registeredProviders = registeredProviders;
     _httpContextAccessor = httpContextAccessor;
 }