0

我打电话FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection criterias)给注射DataFactory,我正在NullReferenceException接受DefaultPageCriteriaQueryService.GetProviderQueryService()

[NullReferenceException:对象引用未设置为对象的实例。]
EPiServer.Core.DefaultPageCriteriaQueryService.GetProviderQueryService(ContentProvider provider)+44
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteriaInternal(PageReference pageLink,PropertyCriteriaCollection 标准,字符串语言分支,ILanguageSelector 选择器,FindPagesWithCriteriaDelegate findPagesDelegate ) +293
EPiServer.Core.DefaultPageCriteriaQueryService.FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection 标准, String languageBranch, ILanguageSelector 选择器) +124
EPiServer.DataFactory.FindPagesWithCriteria(PageReference pageLink, PropertyCriteriaCollection 标准) +115
...

我已经连接了 Episerver 符号服务器并逐步执行了代码,深入DefaultPageCriteriaQueryService我可以看到ContentProvider传递给GetProviderQueryService()的为 null 导致 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 应该有一个默认的提供者吗?

4

2 回答 2

5

我不认为你可以注入 DataFactory 因为它是一个单例。但是,您可以注入EPiServer.Core.IPageCriteriaQueryService具有该方法的FindPagesWithCriteria方法。

于 2017-02-15T12:32:33.913 回答
0

正如@Andreas 所暗示的,这是依赖注入的问题。我已将以下类型绑定添加到我的IConfigurableModule,现在一切正常:

cfg.For<DataFactory>().Use(() => DataFactory.Instance);
cfg.For<IContentRepository>().Use(() => DataFactory.Instance);
cfg.For<IContentLoader>().Use(() => DataFactory.Instance);
于 2017-02-15T12:54:54.107 回答