Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Igor 3 posts 73 karma points
    Feb 14, 2020 @ 07:00
    Igor
    0

    Nullreference exception IComponent IMacroRenderer

    Hello i have a problem..

    my code

    Initialize TaskExecuting

    [RuntimeLevel(MinLevel = RuntimeLevel.Run)]
    public class SubscribeComposer : IUserComposer {
        public void Compose(Composition composition) {
          composition.Components().Append<TaskExecutingComponent>();
        }
    }
    

    TaskExecuting class

    public class TaskExecutingComponent : IComponent
    {
      ...
        public TaskExecutingComponent(IProfilingLogger logger, IMacroRenderer macroRenderer, IUmbracoDatabaseService dataBaseService, IScopeProvider scopeProvider, UmbracoMapper umbracoMapper, SubscribeConfiguration config, IMacroService macroService, IPublishedSnapshotAccessor publishedSnapshotAccessor) {
           ...
        }
    
        public void Initialize() {
            int delayBeforeWeStart = 60000;
            int howOftenWeRepeat = 60000; 
    
            var task = new Task(_sharePriceRunnerRunner,
                delayBeforeWeStart,
                howOftenWeRepeat,
                _logger,
                _dataBaseService,
                _scopeProvider,
                _macroRenderer,
                _umbracoMapper,
                _config,
                _macroService,
                _publishedSnapshotAccessor);
    
            _sharePriceRunnerRunner.TryAdd(task);
        }
    
        public void Terminate()
        {
        }
    }
    

    And with problem moment

    public class Task : RecurringTaskBase {
        ...
    
        public Task(IBackgroundTaskRunner<RecurringTaskBase> runner, int delayBeforeWeStart, int howOftenWeRepeat, IProfilingLogger logger, IUmbracoDatabaseService dataBaseService, IScopeProvider scopeProvider, IMacroRenderer macroRenderer, UmbracoMapper umbracoMapper, SubscribeConfiguration config, IMacroService macroService, IPublishedSnapshotAccessor publishedSnapshotAccessor)
            : base(runner, delayBeforeWeStart, howOftenWeRepeat) {
            _...
        }
    
        public override bool PerformRun() {
                var PageId = 999; // This page is present
            var macro = _macroService.GetById(task.MacrosId);
            var macro_params = _umbracoMapper.Map<IEnumerable<MacroParameter>>(macro);
            var maxro_param_val = new Dictionary<string, object>();
    
        maxro_param_val.Add("getFrom", DateTime.Now.Date());
    
            var content_val = _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(PageId);
            var macro_props = maxro_param_val.ToDictionary(
                x => x.Key,
                i => i.Value is string ? HttpUtility.HtmlDecode(i.Value.ToString()) : i.Value);
    
            var result = _macroRenderer.Render(macro.Alias, content_val, macro_props).GetAsText();
    
            return true;
        }
    

    And Exception

    System.NullReferenceException: 
    in _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(_config.SubscribeMessage.SubscribePageId.Value);
    

    if i use other methods for recive Content i have problem with content in _macroRenderer.Render

  • Igor 3 posts 73 karma points
    Feb 16, 2020 @ 06:08
    Igor
    0

    I solved my problem, now I have a new problem)

    Solved how render macro in background task

    first im use

    (...,IUmbracoContextFactory umbracoContextFactory)
    

    when redid standard methods

    using (var umbracoContextReference = _umbracoContextFactory.EnsureUmbracoContext()) {
    var content = umbracoContextReference.UmbracoContext.Content.GetById(999);
    using (var controller = new MyPartialViewMacroController(macro_model, content)) {
        var route_vals = new RouteData();
        route_vals.Values.Add("controller", "PartialViewMacro");
        route_vals.Values.Add("action", "Index");
        //routeVals.DataTokens.Add(Core.UmbracoContextDataToken, umbCtx); //required for UmbracoViewPage
        if (umbracoContextReference.UmbracoContext.HttpContext == null)
            throw new NullReferenceException("HttpContext is null");
        var request = new RequestContext(umbracoContextReference.UmbracoContext.HttpContext, route_vals);
        //controller.ViewData = viewContext.ViewData;
        controller.ControllerContext = new ControllerContext(request, controller);
    
        //call the action to render
        result = controller.RenderViewResultAsString(controller.Index());
    }
    

    }

    Ok and incapsulate umbraco class PartialViewMacroController and rename to MyPartialViewMacroController

    ))

    Ok now i have problem in cshtml....

    var startnode = Umbraco.Content(startnode_id);

    System.NullReferenceException: 
    LightInject.Web.PerWebRequestScopeManager.GetOrAddScope()
    DynamicMethod(Object[] )
    Umbraco.Core.FactoryExtensions.GetInstance[T](IFactory factory)
    Umbraco.Web.Runtime.WebInitialComposer.<>c.<C ompose>b__0_6(IFactory factory)
    Umbraco.Core.FactoryExtensions.GetInstance[T](IFactory factory)
    Umbraco.Web.Mvc.UmbracoViewPage`1.get_Umbraco()
    
  • Igor 3 posts 73 karma points
    Feb 16, 2020 @ 12:28
    Igor
    0

    Ok i solved all my probmels ....

    in schtml need use it for

    UmbracoContext.Content.GetById(...);
    

    not

    Umbraco.Content(...);
    
  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies