Служба внедрения зависимостей, возвращающая тип или пространство имен, не существует в ошибке пространства имен - PullRequest
0 голосов
/ 24 июня 2019

Внедрение зависимостей возвращает ноль для обеих служб, которые мы создаем. Ошибка с ошибкой CS0234: имя типа или пространства имен 'Feature' не существует в пространстве имен 'CCO.Feature.Global.Areas.CCO' (отсутствует ссылка на сборку?). Что вызвало бы это?

Мы преобразуем сайт Sitecore 8.2 в сайт Sitecore 9.1. Это требует использования файлов конфигурации сервиса с использованием инфраструктуры внедрения зависимостей Sitecore и Microsoft. Мы создали файл конфигурации в соответствии с инструкциями службы поддержки Sitecore.

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 MetadataController.IDependencies _dependencies;

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

        public virtual ActionResult HtmlPageTitle()
        {
            var mvcContext = new MvcContext();
            var dataSource = mvcContext.GetContextItem<IGlassBase>();
            var title = _dependencies.MetadataService.GetHtmlPageTitle(dataSource);

            return View(new MvcHtmlString(title));
        }

namespace CCO.Feature.Global.Services
{
    public class GlobalConfigurator : IServicesConfigurator
    {
        public void Configure(IServiceCollection serviceCollection)
        {
            serviceCollection.AddScoped(typeof(MetadataController.IDependencies), typeof(MetadataControllerDependencies));
            serviceCollection.AddTransient<MetadataController>(); 
        }
    }
}

namespace CCO.Feature.Global.Services
{
    public class MetadataControllerDependencies : MetadataController.IDependencies
    {
        public IMetadataService MetadataService { get; set; }
        public ISitecoreConfigurationManager SitecoreConfigurationManager { get; set; }
    }
}

namespace CCO.Feature.Global.Services
{
    public interface IMetadataService
    {
        string GetHtmlPageTitle(IGlassBase pageItem);
        IPageMetadata GetPageMetadata(IGlassBase pageItem);
        string GetCustomHeadHtml(IGlassBase pageItem);
        string GetOpenGraphImage(IGlassBase pageItem);
    }
}

Мы ожидали, что служба вернет заголовок страницы, но получит сообщение об ошибке. CS0234: имя типа или имени пространственного объекта «Feature» не существует в пространстве имен «CCO.Feature.Global.Areas.CCO» (вы пропустили ссылка на сборку?), которая затем выдает исключение нулевой ссылки при попытке вернуть представление.

Добавлена ​​трассировка стека 6/25/2019

Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 38:             var mvcContext = new MvcContext();
Line 39:            var dataSource = mvcContext.GetContextItem<IGlassBase>();
Line 40:             var title = _dependencies.MetadataService.GetHtmlPageTitle(dataSource);
Line 41: 
Line 42:             return View(new MvcHtmlString(title));

Source File: D:\Source\cco_website\src\Feature\Global\code\Areas\CCO\Controllers\MetadataController.cs    Line: 40 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   CCO.Feature.Global.Areas.CCO.Controllers.MetadataController.HtmlPageTitle() in D:\Source\cco_website\src\Feature\Global\code\Areas\CCO\Controllers\MetadataController.cs:40
   lambda_method(Closure , ControllerBase , Object[] ) +92
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +34
   System.Web.Mvc.<>c__DisplayClass24_0.<InvokeActionMethodWithFilters>b__0() +79
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +454
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +454
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +524
...