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); } }
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); } }