我在当前的项目中遇到了Glass Mapper的问题,之前从未遇到过。
在Sitecore初始化之后,Database
我的GlassContext(ISitecoreContext
)中的属性直接为null。
// After Sitecore initialization, sometimes the glass context database is not initialized yet.
if (this.glassContext == null || this.glassContext.Database == null)
{
this.glassContext = DependencyInjection.Container.Resolve<ISitecoreContext>();
// Now I have a valid this.glassContext.Database ...
}
当我向我的DI框架(Windsor,是Glass的默认框架)询问实例时,它将返回一个具有有效Database属性的实例。
暂时,我正在进行此检查,然后再检索任何项目,并且只需要进行一次检查(此检查直到下一次初始化才是好方法),但是我真的很想知道是什么原因造成的。
可能很有趣:所有项目请求(获取项目,转换项目等)都是通过一项服务完成的,该服务ISitecoreContext
在其构造函数中进行了初始化。
该ItemService
具有的生活方式辛格尔顿中,ISitecoreContext
有生活方式瞬态
我认为您NewsService
是在Sitecore具有有效上下文之前第一次被注入的,因此Glass也不能具有有效上下文(数据库)。因为您ItemService
具有Singleton生命周期,所以构造函数仅被调用一次,并且解析ISitecoreContext
仅完成一次。这意味着,如果您ItemService
在Sitecore具有有效上下文之前第一次得到解决,那么您glassContext
将为null
。在Singleton实例中手动设置glassContext
属性后,下一次该属性将不会为null(但可能无效,因为您在另一个请求中)。
我建议您将两个依赖项都设置为Transient
或PerWebRequest
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句