public void RegisterDecoratorWithPredicate_WithCustomLifestyleSelectionBehavior_RegistersTheDecoratorWithThatCustomLifestyle()
        {
            // Arrange
            var container = new Container();

            container.Options.LifestyleSelectionBehavior =
                new CustomLifestyleSelectionBehavior(Lifestyle.Singleton);

            container.Register <ICommandHandler <RealCommand>, NullCommandHandler <RealCommand> >();
            container.RegisterDecorator(typeof(ICommandHandler <>), typeof(TransactionHandlerDecorator <>),
                                        context => true);

            // Act
            var decorator1 = container.GetInstance <ICommandHandler <RealCommand> >();
            var decorator2 = container.GetInstance <ICommandHandler <RealCommand> >();

            // Assert
            AssertThat.IsInstanceOfType(typeof(TransactionHandlerDecorator <RealCommand>), decorator1);
            Assert.AreSame(decorator1, decorator2, "Decorator was expected to be a singleton.");
        }
        public void GetInstance_OnDecoratedLifetimeScopedInstance_WrapsTheInstanceWithTheDecorator()
        {
            // Arrange
            var container = new Container();

            container.RegisterPerWebRequest <ICommand, ConcreteCommand>();

            container.RegisterDecorator(typeof(ICommand), typeof(CommandDecorator));

            using (new HttpContextScope())
            {
                // Act
                ICommand instance = container.GetInstance <ICommand>();

                // Assert
                AssertThat.IsInstanceOfType(typeof(CommandDecorator), instance);

                var decorator = (CommandDecorator)instance;

                AssertThat.IsInstanceOfType(typeof(ConcreteCommand), decorator.DecoratedInstance);
            }
        }
Esempio n. 3
0
        public void IEnumerableGetEnumerator_OnContainerControlledCollection_ReturnsACorrectEnumerator()
        {
            // Arrange
            List <object> pluginsCopy = new List <object>();

            var container = ContainerFactory.New();

            container.RegisterAll <IPlugin>(typeof(Plugin0), typeof(Plugin1), typeof(Plugin2));

            var plugins = (IEnumerable)container.GetAllInstances <IPlugin>();

            // Act
            foreach (var plugin in plugins)
            {
                pluginsCopy.Add(plugin);
            }

            // Assert
            AssertThat.IsInstanceOfType(typeof(Plugin0), pluginsCopy[0]);
            AssertThat.IsInstanceOfType(typeof(Plugin1), pluginsCopy[1]);
            AssertThat.IsInstanceOfType(typeof(Plugin2), pluginsCopy[2]);
        }
        public void GetInstance_OnDecoratedAsyncScopedLifestyledInstance_WrapsTheInstanceWithTheDecorator()
        {
            // Arrange
            var container = new Container();

            container.Register <ICommand, ConcreteCommand>(new AsyncScopedLifestyle());

            container.RegisterDecorator(typeof(ICommand), typeof(CommandDecorator));

            using (AsyncScopedLifestyle.BeginScope(container))
            {
                // Act
                ICommand instance = container.GetInstance <ICommand>();

                // Assert
                AssertThat.IsInstanceOfType(typeof(CommandDecorator), instance);

                var decorator = (CommandDecorator)instance;

                AssertThat.IsInstanceOfType(typeof(ConcreteCommand), decorator.DecoratedInstance);
            }
        }