GetContextItem <> () всегда null - PullRequest
       39

GetContextItem <> () всегда null

0 голосов
/ 03 февраля 2019

В следующем коде эта строка всегда возвращает нуль:

var datasource = GetContextItem<IGlassBase>(inferType: true);

Это класс:

using System.Web.Mvc;
using Jabberwocky.Glass.Models;
using CCO.Feature.Global.Services;
using CCO.Foundation.Multisite.Configuration;
using CCO.Foundation.Mvc.Controllers;
using Jabberwocky.Autofac.Attributes;

namespace CCO.Feature.Global.Areas.CCO.Controllers
{
   public class MetadataController : CCOController
   {
       [AggregateService]
       public interface IDependencies
       {
          IMetadataService MetadataService { get; set; }
          ISitecoreConfigurationManager SitecoreConfigurationManager { get; set; }
       }

    private readonly IDependencies _dependencies;

    public MetadataController(IDependencies dependencies) : base(dependencies?.SitecoreConfigurationManager)
    {
        _dependencies = dependencies;
    }

    public MetadataController() : base() { }

    public virtual ActionResult HtmlPageTitle()
    {
        var datasource = GetContextItem<IGlassBase>(inferType: true);
        var title = _dependencies.MetadataService.GetHtmlPageTitle(datasource);

        return View(new MvcHtmlString(title));
    }

    public virtual ActionResult Metadata()
    {

        var datasource = GetContextItem<IGlassBase>(inferType: true);
        var model = _dependencies.MetadataService.GetPageMetadata(datasource);

        return View(model);
    }

    public ActionResult CustomHeadHtml()
    {
        var datasource = GetContextItem<IGlassBase>(inferType: true);
        var html = _dependencies.MetadataService.GetCustomHeadHtml(datasource);

        return View(new MvcHtmlString(html));
    }
  }
}

Это работало до обновления GlassMapper до 4.5.0.4 и Jabberwocky до3.0.0.Эти обновления потребовались, когда мы перешли с Sitecore 8.2 на 9.1.

1 Ответ

0 голосов
/ 08 мая 2019

Конструктор без параметров не требуется вообще.Если вы получаете такую ​​ошибку, обычно это означает, что внедрение зависимостей не работает для контроллеров Sitecore.Если вы вручную не регистрируете каждый контроллер (маловероятно), тогда у вас должен быть только тот конструктор, который вы хотите вызвать.

Подробную информацию о внедрении зависимости можно увидеть по этому URL: http://[instance]/sitecore/admin/showservicesconfig.aspx.

Если вы не используете значение по умолчанию serviceProviderBuilder (например, если вы используете AutoFac иличто-то), у вас должен быть собственный конструктор, отображаемый в вашей конфигурации.

Подробнее см. https://doc.sitecore.com/developers/91/sitecore-experience-management/en/dependency-injection.html

...