NullReferenceException when calling FindPagesWithCriteria()

209 views Asked by At

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?

2

There are 2 answers

0
Andreas On

I don't think you can inject DataFactory since it's a singleton. You can however inject EPiServer.Core.IPageCriteriaQueryService instead which has the FindPagesWithCriteria method.

0
Greg B On

As @Andreas alludes to, it's an issue with the dependency injection. I've added the following type bindings to my IConfigurableModule and everything works fine now:

cfg.For<DataFactory>().Use(() => DataFactory.Instance);
cfg.For<IContentRepository>().Use(() => DataFactory.Instance);
cfg.For<IContentLoader>().Use(() => DataFactory.Instance);