public ContentNodeDataProvider(ILoggingService log, ContentNodeSitecoreItemFactory factory, IList <ITemplateFieldValueProvider> providers) { _log = log; _itemFactory = factory; _categoryValueProvider = providers.OfType <ProductCategoryTemplateBuilder>().First(); _catalogValueProvider = providers.OfType <ProductCatalogTemplateBuilder>().First(); _sitecoreItems = new Dictionary <ID, ISitecoreItem>(); }
/// <summary> /// Lazy setup of the dependencies /// </summary> /// <remarks> /// NB! NB! NB! /// /// The lifestyle of the data provider is controlled by Sitecore. It is created at application start, /// and remains in memory throughout. /// /// Therefore you MUST NOT use the ObjectFactory to create objects held by the data provider. /// The lifestyle of the created objects would be either "Thread" or "WebRequest". Keeping a /// reference longer than that is asking for trouble! /// </remarks> private bool EnsureDependenciesHaveBeenSet() { if (_dependenciesHaveBeenSet) { return(true); } lock (_lock) { if (_dependenciesHaveBeenSet) { return(true); } var systemDataProvider = CreateSystemDataProvider(); // I break the "lifestyle" rule stated above. // I can get away with it in this case, because I simply retrive data from the object, // and then it is allowed to be disposed. It is not kept alive. var standardTemplateFieldValueConfiguration = ObjectFactory.Instance.Resolve <ISitecoreStandardTemplateFieldValueConfiguration>(); _standardTemplateFieldValueProvider = new StandardTemplateFieldValueProvider( new StandardFieldValuePersistor(), standardTemplateFieldValueConfiguration.WhiteListTemplateIds, standardTemplateFieldValueConfiguration.BlackListFieldIds ); var builders = CreateTemplateBuilders(); _templateDataProvider = new TemplateDataProvider(_log, _userDefinedTemplateFolderId, new TemplateProvider(builders)); _templateDataProvider.GetTemplateIds(); // Called to make sure the templates are ready. They are needed below. // Field value providers var fieldValueProviders = builders.ToList <ITemplateFieldValueProvider>(); // Content node data provider. var sitecoreItemfactory = new ContentNodeSitecoreItemFactory(fieldValueProviders); CreateProductAndContentNodeDataProviderAggregator(sitecoreItemfactory, fieldValueProviders); _sitecoreDataProviders = new List <ISitecoreDataProvider> { _templateDataProvider, systemDataProvider, _dataProviderAggregator }; SetupItemsWeDeliverChildrenFor(); _dependenciesHaveBeenSet = true; _log.Log <DataProviderMasterDatabase>("Dependencies have been setup."); return(true); } }
/// <summary> /// Create an aggregator containing the product and content node data provider. /// Excludes product data provider if IncludeProductData setting is false. /// </summary> /// <param name="sitecoreItemfactory"></param> /// <param name="fieldValueProviders"></param> private void CreateProductAndContentNodeDataProviderAggregator(ContentNodeSitecoreItemFactory sitecoreItemfactory, List <ITemplateFieldValueProvider> fieldValueProviders) { IList <ISitecoreDataProvider> dataProviders = new List <ISitecoreDataProvider>(); var contentNodeDataProvider = new ContentNodeDataProvider(_log, sitecoreItemfactory, fieldValueProviders); dataProviders.Add(contentNodeDataProvider); if (_dataProviderSettings.IncludeProductData) { var productsDataProvider = new ProductsDataProvider(_log, new ProductNodeSitecoreItemFactory(fieldValueProviders), fieldValueProviders); dataProviders.Add(productsDataProvider); } // Create the aggregator provider for the products and the content. _dataProviderAggregator = new DataProviderAggregator(_rootItemId.Guid, dataProviders, sitecoreItemfactory); }
public DataProviderAggregator(Guid entryPoint, IEnumerable <ISitecoreDataProvider> providers, ContentNodeSitecoreItemFactory factory) { _factory = factory; _entryPoint = new ID(entryPoint); _providers = providers.ToList(); _root = CreateRoot(); _firstLevelIds = new IDList { _root.Id }; _secondLevelIds = new IDList(); foreach (var provider in _providers) { provider.SetEntryIdInSitecoreTree(_root.Id); var ids = provider.GetFirstLevelIds(); foreach (ID id in ids) { _secondLevelIds.Add(id); } } }