I'm calling FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection criterias) on an injected DataFactory and I'm getting a NullReferenceException in DefaultPageCriteriaQueryService.GetProviderQueryService():
[NullReferenceException: Object reference not set to an instance of an object.]
EPiServer.Core.DefaultPageCriteriaQueryService.GetProviderQueryService(ContentProvider provider) +44
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteriaInternal(PageReference pageLink, PropertyCriteriaCollection criterias, String languageBranch, ILanguageSelector selector, FindPagesWithCriteriaDelegate findPagesDelegate) +293
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection criterias, String languageBranch, ILanguageSelector selector) +124
EPiServer.DataFactory.FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection criterias) +115
...
I've hooked up the Episerver symbol servers and stepped through the code, dee down in DefaultPageCriteriaQueryService I can see the ContentProvider being passed to GetProviderQueryService() is null leading to the NRE. The line calling this method is this:
case TypeOfSearch.Local:
return findPagesDelegate(pageLink, tempCriteria, languageBranch, selector, this.GetProviderQueryService(this._providerManager.ProviderMap.GetDefaultProvider()));
with the culprit being that _providerManager.ProviderMap.GetDefaultProvider() returns null because _providerManager.ProviderMap is empty. I've never experienced this issue before and I can't find any relevant information about the ProviderMap if it should be initialised.
Why am I experiencing this issue? Why is my ProviderMap empty? Should my ProviderMap have a default provider?
I don't think you can inject DataFactory since it's a singleton. You can however inject
EPiServer.Core.IPageCriteriaQueryServiceinstead which has theFindPagesWithCriteriamethod.