示例#1
0
        private Session CreateSession(
            Action <ScopedObjectRegistry> sessionObjectsConfigurator = null,
            params Type[] commandTypes)
        {
            var parser              = new Parser();
            var nameValidator       = new NameValidator();
            var descriptorGenerator = new CommandAttributeInspector();
            var registry            = new CommandRegistry(nameValidator, descriptorGenerator);

            foreach (var commandType in commandTypes)
            {
                registry.Register(commandType);
            }

            var services      = new CommandServices();
            var scopedObjects = new ScopedObjectRegistry();

            scopedObjects.Register <VariableCollection>();
            sessionObjectsConfigurator?.Invoke(scopedObjects);

            var factory = new CommandFactory(registry, services, scopedObjects);

            var variables = scopedObjects.Resolve(typeof(VariableCollection)) as VariableCollection;
            var replacer  = new VariableReplacer();
            var binder    = new CommandParameterBinder(registry, replacer, variables);

            return(new Session(parser, factory, binder));
        }
示例#2
0
        public void Bind_NumberedParameterContainsVariable_VariableIsReplaced()
        {
            // arrange
            var registry  = CreateCommandRegistry(typeof(NumericNumberedParameterCommand));
            var variables = new VariableCollection();

            variables.Set(new ValueVariable("foo", "10"));

            var replacer = new VariableReplacer();

            var sut     = new CommandParameterBinder(registry, replacer, variables);
            var command = new NumericNumberedParameterCommand();
            var input   = CreateCommandInput("command", new VariableCommandParameter("foo"));

            // act
            var result = sut.Bind(command, input);

            // assert
            Assert.True(result.Success);
            Assert.Equal(10, command.NumberedParameter);
        }
示例#3
0
        public void Bind_NamedParameterContainsVariable_VariableIsReplaced()
        {
            // arrange
            var registry  = CreateCommandRegistry(typeof(NamedParameterCommand));
            var variables = new VariableCollection();

            variables.Set(new ValueVariable("foo", "bar"));

            var replacer = new VariableReplacer();

            var sut     = new CommandParameterBinder(registry, replacer, variables);
            var command = new NamedParameterCommand();
            var input   = CreateCommandInput("nam", new ParameterNameCommandParameter("param1"), new VariableCommandParameter("foo"));

            // act
            var result = sut.Bind(command, input);

            // assert
            Assert.True(result.Success);
            Assert.Equal("bar", command.NamedParameter1);
        }