Craig100
04/02/2024, 8:54 PMJason
04/02/2024, 11:11 PMCraig100
04/02/2024, 11:18 PMJason
04/02/2024, 11:21 PMCraig100
04/02/2024, 11:24 PMCraig100
04/02/2024, 11:25 PMJason
04/02/2024, 11:30 PMCraig100
04/02/2024, 11:32 PMCraig100
04/03/2024, 11:01 AMInvalidOperationException: Cannot resolve 'Web.Core.Extensions.AdvertiserFormWorkflow' from root provider because it requires scoped service 'Umbraco.Cms.Core.IPublishedContentQuery'.
Seems to be something to do with middleware 😦
It's registered with the composer so it shouldn't be that.
This is the constructor with DI:
public AdvertiserFormWorkflow(ILogger<AdvertiserFormWorkflow> logger, IContentService contentService, IMediaService mediaService, MiscHelpers miscHelpers)
Any clues?Craig100
04/03/2024, 11:20 AMusing Umbraco.Core.Composing;
which I've commented out because it doesn't like the "Core" bit. Maybe that's it. But how do I fix it?Jason
04/03/2024, 11:44 AMCraig100
04/03/2024, 12:36 PMCraig100
04/03/2024, 12:38 PMNik
04/03/2024, 12:41 PMCraig100
04/03/2024, 12:44 PMCraig100
04/03/2024, 12:45 PMNik
04/03/2024, 12:46 PMCraig100
04/03/2024, 12:48 PMNik
04/03/2024, 12:52 PMIServiceScope
instead of the IPublishedContentQuery
.
Once you have a service scope you can get to the IPublisehdContentQuery by doing the following:
var publishedContentQuery = serviceScope.ServiceProvider.GetRequiredService<IPublishedContentQuery>();
Nik
04/03/2024, 12:52 PMCraig100
04/03/2024, 12:53 PMCraig100
04/03/2024, 12:59 PMNik
04/03/2024, 1:00 PMCraig100
04/03/2024, 1:04 PMCraig100
04/03/2024, 1:04 PMCraig100
04/03/2024, 1:10 PMNik
04/03/2024, 1:12 PMCraig100
04/03/2024, 1:13 PMCraig100
04/03/2024, 1:15 PMNik
04/03/2024, 1:16 PMNik
04/03/2024, 1:29 PMNik
04/03/2024, 1:30 PMcs
public class MyWorkflow : WorkflowType
{
private readonly ILogger<MyWorkflow> logger;
private readonly IPublishedContentQueryAccessor queryAccessor;
public MyWorkflow(ILogger<MyWorkflow> logger, IPublishedContentQueryAccessor queryAccessor)
{
this.Id = new Guid("123eb0d5-adaa-4729-8b4c-4bb439dc0202");
this.Name = "MyWorkflow";
this.Description = "POC WORKFLOW";
this.logger = logger;
this.queryAccessor = queryAccessor;
}
public override Task<WorkflowExecutionStatus> ExecuteAsync(WorkflowExecutionContext context)
{
logger.LogInformation("Custom workflow hit");
if(queryAccessor.TryGetValue(out var query))
{
var root = query.ContentAtRoot();
logger.LogInformation("Items at root = {rootNodes}", string.Join("\n", root?.Select(x => string.Format("{0} - {1}", x.Id, x.Name)) ?? []));
}
else
{
logger.LogError("Unable to get IPublishedContentQuery");
}
return Task.FromResult(WorkflowExecutionStatus.Completed);
}
public override List<Exception> ValidateSettings()
{
return new List<Exception>();
}
}
Nik
04/03/2024, 1:30 PMNik
04/03/2024, 1:34 PMcs
public class MyWorkflow : WorkflowType
{
private readonly ILogger<MyWorkflow> logger;
private readonly IScopedServiceProvider queryAccessor;
public MyWorkflow(ILogger<MyWorkflow> logger, IScopedServiceProvider queryAccessor)
{
this.Id = new Guid("123eb0d5-adaa-4729-8b4c-4bb439dc0202");
this.Name = "MyWorkflow";
this.Description = "POC WORKFLOW";
this.logger = logger;
this.queryAccessor = queryAccessor;
}
public override Task<WorkflowExecutionStatus> ExecuteAsync(WorkflowExecutionContext context)
{
logger.LogInformation("Custom workflow hit");
var query = queryAccessor.ServiceProvider?.GetRequiredService<IPublishedContentQuery>();
var root = query?.ContentAtRoot();
logger.LogInformation("Items at root = {rootNodes}", string.Join("\n", root?.Select(x => string.Format("{0} - {1}", x.Id, x.Name)) ?? []));
return Task.FromResult(WorkflowExecutionStatus.Completed);
}
public override List<Exception> ValidateSettings()
{
return new List<Exception>();
}
}
Craig100
04/03/2024, 1:38 PMCraig100
04/03/2024, 1:58 PMA hub and casual space for you to interact with fellow community members and learn more about Umbraco!
Powered by