Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Can anybody tell me why I only get one object in the accumulator? #71

Unanswered
UMDev-Brian asked this question in Q&A
Discussion options

public sealed class SetupSteps : List<ISetupStep>;
var config = DI.Setup(nameof(Composition))
.Accumulate<ISetupStep, SetupSteps>(Lifetime.Transient)
.Bind<ISetupStep>().As(Lifetime.Transient).To<LoadConfigs>()
.Bind<ISetupStep>().As(Lifetime.Transient).To<CoreSetupStep>()
.Root<(ISetupStep step, SetupSteps steps)>("Root")

The objects in question:

public abstract class SetupStep : ISetupStep
{
 //protected Composition _composition;
 // public SetupStep(Composition composition)
 // {
 // _composition = composition;
 // }
 public abstract bool IsComplete();
 public abstract Task<bool> RunAsync(Composition composition, INavigationService frame);
}
public sealed class CoreSetupStep : SetupStep
{
 //public CoreSetupStep(Composition composition) : base(composition) { }
 public override bool IsComplete()
 {
 return true;
 }
 public override async Task<bool> RunAsync(Composition composition, INavigationService frame)
 {
 //do core setup
 return true;
 }
}
public sealed class LoadConfigs : SetupStep
{
 // public LoadConfigs(Composition composition) : base(composition) { }
 
 public override bool IsComplete()
 {
 return false;
 // return _composition.Settings == null || _composition.Settings.DbConfig == null || _composition.Settings.SquareConfig == null ||
 // _composition.Settings.AzureConfig == null;
 }
 public override Task<bool> RunAsync(Composition composition, INavigationService frame)
 {
 //_composition = composition;
 //do services setup
 FlourishSettingsProvider.Initialize(composition);//TODO: this could be async
 return Task.FromResult(IsComplete());
 }
}
You must be logged in to vote

Replies: 2 comments

Comment options

The accumulator contains one object, because in fact one object of ISetupStep type was created.
To embed two objects you can embed a collection as in the example below. Also you have an error in the line .Bind<ISetupStep>().As(Lifetime.Transient).To<CoreSetupStep>() you have overridden the binding .Bind<ISetupStep>().As(Lifetime.Transient).To<LoadConfigs>() with a new one, the generator warned about it. To add a new one it can be labelled with some tag, in the example below it is ‘abc’.

DI.Setup(nameof(Composition))
 .Accumulate<ISetupStep, SetupSteps>(Lifetime.Transient)
 .Bind<ISetupStep>().As(Lifetime.Transient).To<LoadConfigs>()
 .Bind<ISetupStep>("abc").As(Lifetime.Transient).To<CoreSetupStep>()
 .Root<(IReadOnlyCollection<ISetupStep> allSteps, SetupSteps steps)>("Root");
var composition = new Composition();
var root = composition.Root;
var steps = root.steps;
return 0;
internal sealed class SetupSteps : List<ISetupStep>;
internal interface ISetupStep;
internal interface INavigationService;
 
internal abstract class SetupStep : ISetupStep
{
 //protected Composition _composition;
 // public SetupStep(Composition composition)
 // {
 // _composition = composition;
 // }
 public abstract bool IsComplete();
 
 public abstract Task<bool> RunAsync(Composition composition, INavigationService frame);
}
internal sealed class CoreSetupStep : SetupStep
{
 //public CoreSetupStep(Composition composition) : base(composition) { }
 public override bool IsComplete()
 {
 return true;
 }
 public override async Task<bool> RunAsync(Composition composition, INavigationService frame)
 {
 //do core setup
 return true;
 }
}
internal sealed class LoadConfigs : SetupStep
{
 // public LoadConfigs(Composition composition) : base(composition) { }
 public override bool IsComplete()
 {
 return false;
 // return _composition.Settings == null || _composition.Settings.DbConfig == null || _composition.Settings.SquareConfig == null ||
 // _composition.Settings.AzureConfig == null;
 }
 public override Task<bool> RunAsync(Composition composition, INavigationService frame)
 {
 //_composition = composition;
 //do services setup
 return Task.FromResult(IsComplete());
 }
}
You must be logged in to vote
0 replies
Comment options

Thanks for the explanation! That makes a lot of sense. I will make the relevant changes.

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
question Further information is requested
Converted from issue

This discussion was converted from issue #68 on August 21, 2024 16:16.

AltStyle によって変換されたページ (->オリジナル) /