Example #1
0
        public void ShouldDoNothingOnCleanupIfInitializerInstanceIsNotSet()
        {
            InitializationActionExecutor executor = new InitializationActionExecutor();
            InitializationAction         action   = new InitializationAction("Action");

            executor.ExecuteCleanupForAction(action);
        }
Example #2
0
 private void ApplicationStartup(object sender, StartupEventArgs e)
 {
     Exit += (o, args) => ExitAction.Invoke();
     Window.Show();
     InitializationAction.Invoke();
     // DataBase.GetCollection<AlgorithmResult>().DeleteAll();
 }
    public void ShouldThrowInvalidOperationExceptionIfThereIsNoConstructorThatMatchesArguments()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction action = new InitializationAction("Action") { State = new InitializationHandler(typeof(SimpleInitializer), new object[] { 1 }) };

      Assert.ThrowsDelegate routine = () => executor.ExecuteInitializationForAction(action);

      Assert.Throws<InvalidOperationException>(routine);
    }
    public void ShouldThrowExceptionOnInitializationIfActionStateIsNotAnInitializationHandler()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction initializationAction = new InitializationAction("System.String,mscorlib") { State = "a" };

      Assert.ThrowsDelegate action = () => executor.ExecuteInitializationForAction(initializationAction);

      Assert.Throws<ArgumentException>(action);
    }
Example #5
0
        public void ShouldDoNothingOnCleanupIfInitializerInstanceCannotBeDisposed()
        {
            InitializationActionExecutor executor = new InitializationActionExecutor();
            InitializationAction         action   = new InitializationAction("Action")
            {
                State = new SimpleInitializer()
            };

            executor.ExecuteCleanupForAction(action);
        }
Example #6
0
        public void ShouldThrowInvalidOperationExceptionIfThereIsNoConstructorThatMatchesArguments()
        {
            InitializationActionExecutor executor = new InitializationActionExecutor();
            InitializationAction         action   = new InitializationAction("Action")
            {
                State = new InitializationHandler(typeof(SimpleInitializer), new object[] { 1 })
            };

            Assert.ThrowsDelegate routine = () => executor.ExecuteInitializationForAction(action);

            Assert.Throws <InvalidOperationException>(routine);
        }
    public void ShouldCreateInitializerInstanceOnInitializationAndSaveItIntoActionsState()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction action = new InitializationAction("Action") { State = new InitializationHandler(typeof(SimpleInitializer), new object[0]) };

      SimpleInitializer.Parameter = null;
      
      executor.ExecuteInitializationForAction(action);

      Assert.NotNull(SimpleInitializer.Parameter);
      Assert.Equal(string.Empty, SimpleInitializer.Parameter);
    }
Example #8
0
        public void ShouldThrowExceptionOnInitializationIfActionStateIsNotAnInitializationHandler()
        {
            InitializationActionExecutor executor             = new InitializationActionExecutor();
            InitializationAction         initializationAction = new InitializationAction("System.String,mscorlib")
            {
                State = "a"
            };

            Assert.ThrowsDelegate action = () => executor.ExecuteInitializationForAction(initializationAction);

            Assert.Throws <ArgumentException>(action);
        }
    /// <summary>
    /// Executes cleanup operation for the action.
    /// </summary>
    /// <param name="action">The action.</param>
    public virtual void ExecuteCleanupForAction(InitializationAction action)
    {
      if (action == null)
      {
        throw new ArgumentNullException("action");
      }

      IDisposable disposableCandidate = action.State as IDisposable;

      if (disposableCandidate != null)
      {
        disposableCandidate.Dispose();
      }
    }
    public void ShouldCreateInitializerInstanceUsingParametersOnInitializationAndSaveItIntoActionsState(Type initializerType)
    {
      const string Parameter = "parameter";

      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction action = new InitializationAction("Action") { State = new InitializationHandler(initializerType, new object[] { Parameter }) };

      SimpleInitializer.Parameter = null;

      executor.ExecuteInitializationForAction(action);

      Assert.NotNull(SimpleInitializer.Parameter);
      Assert.Equal(Parameter, SimpleInitializer.Parameter);
    }
Example #11
0
        public void ShouldDisposeInitializerInstanceOnCleanup()
        {
            InitializationActionExecutor executor = new InitializationActionExecutor();
            InitializationAction         action   = new InitializationAction("Action")
            {
                State = new DisposibleInitializer()
            };

            DisposibleInitializer.Disposed = false;

            executor.ExecuteCleanupForAction(action);

            Assert.True(DisposibleInitializer.Disposed);
        }
Example #12
0
        public void ShouldCreateInitializerInstanceOnInitializationAndSaveItIntoActionsState()
        {
            InitializationActionExecutor executor = new InitializationActionExecutor();
            InitializationAction         action   = new InitializationAction("Action")
            {
                State = new InitializationHandler(typeof(SimpleInitializer), new object[0])
            };

            SimpleInitializer.Parameter = null;

            executor.ExecuteInitializationForAction(action);

            Assert.NotNull(SimpleInitializer.Parameter);
            Assert.Equal(string.Empty, SimpleInitializer.Parameter);
        }
Example #13
0
        public void ShouldSetInitializationContextIfInitializationHandlerImplementsIInitializationContextAware()
        {
            InitializationActionExecutor executor = new InitializationActionExecutor();
            TestInitializationContext    context  = new TestInitializationContext(null, typeof(string).GetMethod("Intern"), new object[0]);
            InitializationAction         action   = new InitializationAction("Action")
            {
                State = new InitializationHandler(typeof(InitializationContextAwareInitializer), new object[0]), Context = context
            };

            InitializationContextAwareInitializer.InitializationContext = null;

            executor.ExecuteInitializationForAction(action);

            Assert.Equal(context, InitializationContextAwareInitializer.InitializationContext);
        }
    /// <summary>
    /// Executes initialization for the action.
    /// </summary>
    /// <param name="action">The action.</param>
    public virtual void ExecuteInitializationForAction(InitializationAction action)
    {
      if (action == null)
      {
        throw new ArgumentNullException("action");
      }

      InitializationHandler initializationHandler = action.State as InitializationHandler;

      if (initializationHandler == null)
      {
        throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Action in not in a proper state. It's 'State' property should be of type '{0}' and should not be null.", typeof(InitializationHandler)));
      }

      Type[] argumentTypes = new Type[initializationHandler.Arguments.Length];

      for (int index = 0; index < initializationHandler.Arguments.Length; ++index)
      {
        argumentTypes[index] = initializationHandler.Arguments[index].GetType();
      }

      ConstructorInfo constructor = initializationHandler.Type.GetConstructor(argumentTypes);

      if (constructor == null)
      {
        constructor = initializationHandler.Type.GetConstructor(new[] { typeof(object[]) });

        if (constructor == null)
        {
          throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Failed to create an instance of '{0}' type. No constructor found that matches the list of parameters.", initializationHandler.Type.AssemblyQualifiedName));
        }
        
        action.State = constructor.Invoke(new object[] { initializationHandler.Arguments });
      }
      else
      {
        action.State = constructor.Invoke(initializationHandler.Arguments);
      }

      IInitializationContextAware contextAwareInitializer = action.State as IInitializationContextAware;

      if (contextAwareInitializer != null)
      {
        contextAwareInitializer.SetInitializationContext(action.Context);
      }
    }
Example #15
0
        public void ShouldCreateInitializerInstanceUsingParametersOnInitializationAndSaveItIntoActionsState(Type initializerType)
        {
            const string Parameter = "parameter";

            InitializationActionExecutor executor = new InitializationActionExecutor();
            InitializationAction         action   = new InitializationAction("Action")
            {
                State = new InitializationHandler(initializerType, new object[] { Parameter })
            };

            SimpleInitializer.Parameter = null;

            executor.ExecuteInitializationForAction(action);

            Assert.NotNull(SimpleInitializer.Parameter);
            Assert.Equal(Parameter, SimpleInitializer.Parameter);
        }
    public void ShouldDoNothingOnCleanupIfInitializerInstanceCannotBeDisposed()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction action = new InitializationAction("Action") { State = new SimpleInitializer() };

      executor.ExecuteCleanupForAction(action);
    }
Example #17
0
        private void m_model_ModelInitializing(IModel model, object userData)
        {
            lock (_token){
                m_generation++;

                IList dependentList   = m_gs.GetServiceSequenceList();
                IList independentList = m_zeroDependencyInitializers;

                if (m_generation == 0)
                {
                    ValidateModel(dependentList);
                }

                Clear();

                InitializationBeginning?.Invoke(m_generation);

                // First call into the ones that don't need it.
                foreach (object[] oa in independentList)
                {
                    Initializer initializer = (Initializer)oa[0];
                    object[]    parameters  = (object[])oa[1];
                    InitializationAction?.Invoke(initializer, parameters);
                    initializer(model, parameters);
                }

                // Next walk through the ones that do, in an appropriate sequence.
                try {
                    foreach (Dv dv in dependentList)
                    {
                        InitializationAction?.Invoke(dv.Initializer, dv.Parameters);
                        dv.PerformInitialization(model);
                    }
                } catch (GraphCycleException gce) {
                    IList cycleMembers           = (ArrayList)gce.Members;
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();

                    for (int i = 0; i < cycleMembers.Count; i++)
                    {
                        if (i != 0)
                        {
                            sb.Append("->");
                        }
                        object target  = ((Dv)cycleMembers[i]).Initializer.Target;
                        Type   mbrType = target.GetType();
                        string name    = null;
                        System.Reflection.PropertyInfo nameProp = mbrType.GetProperty("Name");
                        if (nameProp == null)
                        {
                            name = "(unknown " + cycleMembers[i].GetType().Name + ")";
                        }
                        else
                        {
                            name = (string)nameProp.GetValue(target, new object[] {});
                        }
                        sb.Append(name);
                    }

                    throw new ApplicationException("Failure to initialize due to a cyclical dependency involving [...->" + sb + "->...].");

                    //string cycle = FindCycle(cyclist);
                    //Console.WriteLine("Cycle is " + cycle + ".");
                }

                // If more initializers have been added during this generation, run another generation of initialization.
                if (m_gs.GetServiceSequenceList().Count > 0 || m_zeroDependencyInitializers.Count > 0)
                {
                    m_model_ModelInitializing(model, userData);
                }

                if (m_generation == 0)
                {
                    InitializationCompleted?.Invoke(m_generation);
                }

                m_generation--;
            } // End of lock.

            // When all initialization iterations have completed...
        }
    public void ShouldSetInitializationContextIfInitializationHandlerImplementsIInitializationContextAware()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      TestInitializationContext context = new TestInitializationContext(null, typeof(string).GetMethod("Intern"), new object[0]);
      InitializationAction action = new InitializationAction("Action") { State = new InitializationHandler(typeof(InitializationContextAwareInitializer), new object[0]), Context = context };

      InitializationContextAwareInitializer.InitializationContext = null;

      executor.ExecuteInitializationForAction(action);

      Assert.Equal(context, InitializationContextAwareInitializer.InitializationContext);
    }
    public void ShouldDoNothingOnCleanupIfInitializerInstanceIsNotSet()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction action = new InitializationAction("Action");

      executor.ExecuteCleanupForAction(action);
    }
    public void ShouldDisposeInitializerInstanceOnCleanup()
    {
      InitializationActionExecutor executor = new InitializationActionExecutor();
      InitializationAction action = new InitializationAction("Action") { State = new DisposibleInitializer() };

      DisposibleInitializer.Disposed = false;

      executor.ExecuteCleanupForAction(action);

      Assert.True(DisposibleInitializer.Disposed);
    }