예제 #1
0
 public void RegisterLateInitializable(ILateInitializable lateInitializable)
 {
     if (_lateInitializables.Contains(lateInitializable))
     {
         return;
     }
     _lateInitializables.Add(lateInitializable);
 }
예제 #2
0
        public InitializableManager([Inject(Optional = true, Source = InjectSources.Local)] List <IInitializable> initializables,
                                    [Inject(Optional = true, Source = InjectSources.Local)] List <ValuePair <Type, int> > priorities,
                                    [Inject(Optional = true, Source = InjectSources.Local)] List <ILateInitializable> lateInitializables,
                                    [Inject(Id = "Late", Optional = true, Source = InjectSources.Local)] List <ValuePair <Type, int> > latePriorities)
        {
            this.initializables     = new List <InitializableInfo>(initializables.Count);
            this.lateInitializables = new List <LateInitializableInfo>(lateInitializables.Count);

            for (var i = 0; i < initializables.Count; i++)
            {
                IInitializable initializable = initializables[i];

                // Note that we use zero for unspecified priority
                // This is nice because you can use negative or positive for before/after unspecified
                List <int> matches = priorities.Where(x => initializable.GetType().DerivesFromOrEqual(x.First))
                                     .Select(x => x.Second)
                                     .ToList();

                int priority = matches.IsEmpty() ? 0 : matches.Distinct().Single();

                this.initializables.Add(new InitializableInfo(initializable, priority));
            }

            for (var i = 0; i < lateInitializables.Count; i++)
            {
                ILateInitializable lateInitializable = lateInitializables[i];

                // Note that we use zero for unspecified priority
                // This is nice because you can use negative or positive for before/after unspecified
                List <int> matches = latePriorities.Where(x => lateInitializable.GetType().DerivesFromOrEqual(x.First))
                                     .Select(x => x.Second)
                                     .ToList();

                int priority = matches.IsEmpty() ? 0 : matches.Distinct().Single();
                this.lateInitializables.Add(new LateInitializableInfo(lateInitializable, priority));
            }
        }
예제 #3
0
 private void AddLateInitializable(ILateInitializable obj)
 {
     _lateInitializables.Add(obj);
 }
 public LateInitializableInfo(ILateInitializable lateInitializable, int priority)
 {
     LateInitializable = lateInitializable;
     Priority          = priority;
 }
예제 #5
0
 public void AddLate(ILateInitializable initializable, int priority)
 {
     lateInitializables.Add(new LateInitializableInfo(initializable, priority));
 }
예제 #6
0
 public void AddLate(ILateInitializable initializable)
 {
     AddLate(initializable, 0);
 }
예제 #7
0
 public LateInitializableInfo(ILateInitializable lateInitializable, int priority)
 {
     this.lateInitializable = lateInitializable;
     this.priority          = priority;
 }