public TargetingMiddleware(RequestDelegate next, ServiceSetConfigurator <ITargetingProvider> p, ServiceSetConfigurator <ITargetingProviderAsync> p2) { _next = next; _targetingConfigurationBuilder = p; _targetingConfigurationBuilderForAsync = p2; }
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))); }
public TargetingFilterAccessor(ServiceSetConfigurator <ITargetingFilter> cfg, IHttpContextAccessor httpContextAccessor) { _cfg = cfg; _httpContextAccessor = httpContextAccessor; }
public HeadTokenPossibleValuesAccessor(ServiceSetConfigurator <IHeadTokenPossibleValuesProvider> registeredProviders, IHttpContextAccessor httpContextAccessor) { _registeredProviders = registeredProviders; _httpContextAccessor = httpContextAccessor; }