-
Notifications
You must be signed in to change notification settings - Fork 29
Can anybody tell me why I only get one object in the accumulator? #71
-
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()); } }
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 2 comments
-
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()); } }
Beta Was this translation helpful? Give feedback.
All reactions
-
👍 1
-
Thanks for the explanation! That makes a lot of sense. I will make the relevant changes.
Beta Was this translation helpful? Give feedback.