2017-02-15 118 views
0

我打電話上注入DataFactoryFindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection criterias)和我得到一個NullReferenceExceptionDefaultPageCriteriaQueryService.GetProviderQueryService()的NullReferenceException

[NullReferenceException異常:對象引用不設置到 對象的實例]
EPiServer.Core.DefaultPageCriteriaQueryService.GetProviderQueryService(ContentProvider的 提供商)44
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteriaInternal(PageReference pageLink,PropertyCrit eriaCollection指標分析,字符串languageBranch, ILanguageSelector選擇器,FindPagesWithCriteriaDelegate findPagesDelegate)293
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteria(PageReference pageLink,PropertyCriteriaCollection指標分析,字符串languageBranch, ILanguageSelector選擇器)124
EPiServer.DataFactory.FindPagesWithCriteria( PageReference pageLink, PropertyCriteriaCollection指標分析)+115
...

我已經迷上了Episerver符號服務器s並通過代碼,在DefaultPageCriteriaQueryService dee下來我可以看到ContentProvider被傳遞給GetProviderQueryService()爲空導致的NRE。該行調用這個方法是這樣的:

case TypeOfSearch.Local: 
     return findPagesDelegate(pageLink, tempCriteria, languageBranch, selector, this.GetProviderQueryService(this._providerManager.ProviderMap.GetDefaultProvider())); 

與罪魁禍首在於_providerManager.ProviderMap.GetDefaultProvider()返回null,原因_providerManager.ProviderMap是空的。我從來沒有遇到過這個問題,如果應該初始化,我找不到任何有關ProviderMap的相關信息。

爲什麼我遇到這個問題?爲什麼我的ProviderMap爲空?我的ProviderMap應該有默認提供者嗎?

回答

5

我不認爲你可以注入DataFactory,因爲它是一個單例。但是,您可以注入EPiServer.Core.IPageCriteriaQueryService而不是其中的FindPagesWithCriteria方法。

0

As @Andreas暗示,這是依賴注入的問題。我已將以下類型的綁定添加到我的IConfigurableModule,現在一切正常:

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