2017-02-15 84 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);