public void intercept_a_literal_object()
        {
            var widget    = new AWidget();
            var container = new Container(x =>
            {
                x.For <IWidget>().DecorateAllWith(w => new WidgetHolder(w));
                x.For <IWidget>().Use(widget);
            });

            container.GetInstance <IWidget>()
            .ShouldBeOfType <WidgetHolder>()
            .Inner.ShouldBeTheSameAs(widget);
        }
Beispiel #2
0
        public void throw_if_not_concrete()
        {
            var clock  = new Clock();
            var widget = new AWidget();

            var container = Container.For(_ =>
            {
                _.AddSingleton <IClock>(clock);
                _.AddSingleton <IWidget>(widget);
            });

            Exception <InvalidOperationException> .ShouldBeThrownBy(() => { container.QuickBuild <IWidget>(); });
        }
Beispiel #3
0
 public static void HideWidget(AssetReference assetReference)
 {
     if (activeWidgets.ContainsKey(assetReference))
     {
         AWidget activeWidget = activeWidgets[assetReference];
         if (activeWidget != null)
         {
             activeWidget.Hide();
             activeWidgets.Remove(assetReference);
             inactiveWidgetPool.Add(assetReference, activeWidget);
         }
     }
 }
Beispiel #4
0
        public void specify_an_array_as_a_constructor()
        {
            IWidget widget1 = new AWidget();
            IWidget widget2 = new AWidget();
            IWidget widget3 = new AWidget();

            build <ClassWithWidgetArrayCtor>(i => i.EnumerableOf <IWidget>().Contains(x =>
            {
                x.Object(widget1);
                x.Object(widget2);
                x.Object(widget3);
            })).Widgets.ShouldBe(new[] { widget1, widget2, widget3 });
        }
Beispiel #5
0
        public void specify_an_array_as_a_property()
        {
            IWidget widget1 = new AWidget();
            IWidget widget2 = new AWidget();
            IWidget widget3 = new AWidget();

            build <ClassWithWidgetArraySetter>(i => i.TheArrayOf <IWidget>().Contains(x =>
            {
                x.Object(widget1);
                x.Object(widget2);
                x.Object(widget3);
            })).Widgets.ShouldEqual(new[] { widget1, widget2, widget3 });
        }
Beispiel #6
0
    public static async Task <T> ShowWidget <T>(AssetReference assetReference, IWidgetProperties properties)
        where T : AWidget
    {
        if (activeWidgets.ContainsKey(assetReference))
        {
            AWidget returnWidget = activeWidgets[assetReference];
            returnWidget.ApplyProperties(properties);
            return((T)returnWidget);
        }
        else if (inactiveWidgetPool.ContainsKey(assetReference))
        {
            AWidget widget = inactiveWidgetPool[assetReference];
            widget.ApplyProperties(properties);
            widget.Show();
            activeWidgets.Add(assetReference, widget);
            inactiveWidgetPool.Remove(assetReference);
            return((T)widget);
        }
        else
        {
            GameObject result = await assetReference.LoadAssetAsync <GameObject>().Task;

            AWidget    assetWidget = result.GetComponent <AWidget>();
            GameObject parentLayer;
            if (assetWidget.GetComponentType() == UiComponentType.Static)
            {
                parentLayer = staticUiLayer;
            }
            else if (assetWidget.GetComponentType() == UiComponentType.Dynamic)
            {
                parentLayer = dynamicUiLayer;
            }
            else if (assetWidget.GetComponentType() == UiComponentType.Overlay)
            {
                parentLayer = overlayUiLayer;
            }
            else
            {
                Debug.LogError("Layer has not been defined for Widget: " + assetWidget.name);
                return(null);
            }

            AWidget newWidget = GameObject.Instantiate(assetWidget, parentLayer.transform);
            newWidget.Open();
            newWidget.ApplyProperties(properties);
            activeWidgets.Add(assetReference, newWidget);
            return((T)newWidget);
        }
    }
Beispiel #7
0
        public void Add_default_instance_with_literal()
        {
            var registry  = new Registry();
            var theWidget = new AWidget();

            string theProfileName = "something";

            registry.Profile(theProfileName)
            .For <IWidget>().Use(theWidget);

            PluginGraph graph    = registry.Build();
            var         instance = (ObjectInstance)graph.ProfileManager.GetDefault(typeof(IWidget), "something");

            Assert.AreSame(theWidget, instance.Object);
        }
Beispiel #8
0
        public void Add_default_instance_with_literal()
        {
            var registry  = new Registry();
            var theWidget = new AWidget();

            var theProfileName = "something";

            registry.Profile(theProfileName, p => { p.For <IWidget>().Use(theWidget); });

            var graph = registry.Build();

            graph.Profile("something").Families[typeof(IWidget)].GetDefaultInstance()
            .ShouldBeOfType <ObjectInstance <AWidget, IWidget> >()
            .Object.ShouldBeTheSameAs(theWidget);
        }
Beispiel #9
0
        public void throw_if_no_public_constructors()
        {
            var clock  = new Clock();
            var widget = new AWidget();

            var container = Container.For(_ =>
            {
                _.AddSingleton <IClock>(clock);
                _.AddSingleton <IWidget>(widget);
            });

            Exception <InvalidOperationException> .ShouldBeThrownBy(() =>
            {
                container.QuickBuild <GuyWithNoPublicConstructors>();
            }).Message.ShouldContain(ConstructorInstance.NoPublicConstructors);
        }
Beispiel #10
0
        public void uses_greediest_constructor_it_can()
        {
            var clock  = new Clock();
            var widget = new AWidget();

            var container = Container.For(_ =>
            {
                _.AddSingleton <IClock>(clock);
                //_.AddSingleton<IWidget>(widget);
            });

            var user = container.QuickBuild <WidgetUser>();

            user.Clock.ShouldBeSameAs(clock);
            user.Widget.ShouldBeNull();
        }
Beispiel #11
0
        public void happy_path()
        {
            var clock  = new Clock();
            var widget = new AWidget();

            var container = Container.For(_ =>
            {
                _.AddSingleton <IClock>(clock);
                _.AddSingleton <IWidget>(widget);
            });

            var user = container.QuickBuild <WidgetUser>();

            user.Clock.ShouldBeSameAs(clock);
            user.Widget.ShouldBeSameAs(widget);
        }
Beispiel #12
0
        public void use_all_instances_of_an_enumerable_element_type()
        {
            var widget1 = new AWidget();
            var widget2 = new AWidget();
            var widget3 = new AWidget();

            var container = new Container(x => {
                x.For <IWidget>().AddInstances(o => {
                    o.Object(widget1);
                    o.Object(widget2);
                    o.Object(widget3);
                });
            });

            container.GetInstance <ClassWithWidgets>().Widgets.ShouldHaveTheSameElementsAs(widget1, widget2, widget3);
        }
Beispiel #13
0
        public void inject_into_root_container()
        {
            var container = new Container(_ =>
            {
                _.Injectable <IWidget>();
            });

            var widget = new AWidget();

            container.Inject <IWidget>(widget);

            container.GetInstance <IWidget>()
            .ShouldBeSameAs(widget);

            container.GetInstance <WidgetUser>()
            .Widget.ShouldBeSameAs(widget);
        }
Beispiel #14
0
        public void inject_into_root_container(bool replace)
        {
            var container = new Container(_ =>
            {
                _.Injectable <IWidget>();
            });

            var widget = new AWidget();

            container.Inject(typeof(IWidget), widget, replace);

            container.GetInstance <IWidget>()
            .ShouldBeSameAs(widget);

            container.GetInstance <WidgetUser>()
            .Widget.ShouldBeSameAs(widget);
        }
Beispiel #15
0
        public void get_for_cached_instance_created_on_different_thread_returns_cached_instance()
        {
            var aWidget  = new AWidget();
            var instance = new ObjectInstance(aWidget);

            cache.Get(typeof(IWidget), instance, new StubBuildSession());

            object cachedWidget = null;
            var    thread       =
                new Thread(() => { cachedWidget = cache.Get(typeof(IWidget), instance, new StubBuildSession()); });

            thread.Start();
            // Allow 10ms for the thread to start and for Get call to complete
            thread.Join(10);

            cachedWidget.ShouldNotBeNull();
            cachedWidget.ShouldBe(aWidget);
        }
Beispiel #16
0
        public void has()
        {
            var widget   = new AWidget();
            var instance = new ObjectInstance(widget);

            cache.Has(typeof(IWidget), instance).ShouldBeFalse();

            cache.Set(typeof(Rule), instance, widget);

            cache.Has(typeof(IWidget), instance).ShouldBeFalse();

            cache.Set(typeof(IWidget), new ObjectInstance(new AWidget()), widget);

            cache.Has(typeof(IWidget), instance).ShouldBeFalse();

            cache.Set(typeof(IWidget), instance, widget);

            cache.Has(typeof(IWidget), instance).ShouldBeTrue();
        }
Beispiel #17
0
        public void replace_causes_replacement_of_previous_value_on_subsequent_call()
        {
            var container = new Container(_ =>
            {
                _.Injectable <IWidget>();
            });

            var replaced = new AWidget();
            var widget   = new AWidget();

            container.Inject(typeof(IWidget), replaced, false);
            container.Inject(typeof(IWidget), widget, true);

            container.GetInstance <IWidget>()
            .ShouldBeSameAs(widget);

            container.GetInstance <WidgetUser>()
            .Widget.ShouldBeSameAs(widget);
        }
Beispiel #18
0
        public void get_for_cached_instance_created_on_different_thread_returns_cached_instance()
        {
            var aWidget  = new AWidget();
            var instance = new ObjectInstance(aWidget);

            cache.Get(typeof(IWidget), instance, new StubBuildSession());

            object cachedWidget = null;
            var    thread       = new Thread(() =>
            {
                cachedWidget = cache.Get(typeof(IWidget), instance, new StubBuildSession());
            });

            thread.Start();
            // Allow 10ms for the thread to start and for Get call to complete
            thread.Join(10);

            Assert.NotNull(cachedWidget, "Get did not return cachedWidget within allowed time. Is your thread being blocked?");
            Assert.AreEqual(aWidget, cachedWidget);
        }
Beispiel #19
0
        public void generic_calls_nongeneric_without_replace()
        {
            var container = new Derived(_ =>
            {
                _.Injectable <IWidget>();
            });

            var widget = new AWidget();

            container.Inject <IWidget>(widget);

            container.serviceType.ShouldBeSameAs(typeof(IWidget));
            [email protected](widget);
            container.replace.ShouldBeFalse();

            container.GetInstance <IWidget>()
            .ShouldBeSameAs(widget);

            container.GetInstance <WidgetUser>()
            .Widget.ShouldBeSameAs(widget);
        }
Beispiel #20
0
        public void inject_scoping_with_nested_container(bool replace)
        {
            var container = new Container(_ =>
            {
                _.Injectable <IWidget>();
            });

            var rootWidget = new AWidget();

            container.Inject(typeof(IWidget), rootWidget, replace);

            var nestedWidget = new BWidget();

            var nested = container.GetNestedContainer();

            nested.Inject <IWidget>(nestedWidget);

            container.GetInstance <IWidget>()
            .ShouldBeSameAs(rootWidget);

            nested.GetInstance <IWidget>()
            .ShouldBeSameAs(nestedWidget);
        }
Beispiel #21
0
        public void build_nested_container_with_defaults()
        {
            var container = new Container(_ =>
            {
                _.For <Blue>().Use <Blue>();
                _.For <IWidget>().Use <DefaultWidget>();
                _.For <Rule>().Use <ARule>();
            });

            var nestedWidget = new AWidget();
            var nestedBlue   = new Blue();
            var arguments    = new TypeArguments().Set(nestedBlue).Set <IWidget>(nestedWidget);

            var nested = container.GetNestedContainer(arguments);

            nested.GetInstance <IWidget>().ShouldBeTheSameAs(nestedWidget);
            nested.GetInstance <Blue>().ShouldBeTheSameAs(nestedBlue);

            // fallback to the parent w/ no defaults
            nested.GetInstance <Rule>().ShouldBeOfType <ARule>();

            // main container is not corrupted by the nested registrations
            container.GetInstance <IWidget>().ShouldBeOfType <DefaultWidget>();
        }