public void CanAddDemandAddServiceAndRetrieveService()
        {
            TestableServiceCollection services = CreateServiceCollection();

            services.AddOnDemand(typeof(MockDemandService));

            Assert.IsTrue(services.Contains <MockDemandService>());
            Assert.IsNotNull(services.Get <MockDemandService>());
        }
        public void DemandAddedServiceFromParentGetsReplacedInParentEvenWhenAskedForFromChild_Generic()
        {
            TestableServiceCollection parent = CreateServiceCollection();
            TestableServiceCollection child  = new TestableServiceCollection(parent);

            parent.AddOnDemand <MockDemandService>();
            MockDemandService svc = child.Get <MockDemandService>();

            Assert.AreSame(svc, parent.Locator.Get(new DependencyResolutionLocatorKey(typeof(MockDemandService), null)));
        }
        public void CanAddDemandAddServiceOfOneTypeAndRegisterAsOtherType()
        {
            TestableServiceCollection services = CreateServiceCollection();

            services.AddOnDemand(typeof(MockDemandService), typeof(IMockDemandService));

            Assert.IsFalse(services.Contains <MockDemandService>());
            Assert.IsTrue(services.Contains <IMockDemandService>());
            Assert.IsNull(services.Get <MockDemandService>());
            Assert.IsNotNull(services.Get <IMockDemandService>());
        }
        public void CanAddDemandAddServiceAndItWontBeCreatedUntilAskedFor()
        {
            TestableServiceCollection services = CreateServiceCollection();

            MockDemandService.WasCreated = false;

            services.AddOnDemand(typeof(MockDemandService));
            Assert.IsFalse(MockDemandService.WasCreated);
            Assert.IsTrue(services.Contains <MockDemandService>());
            Assert.IsFalse(MockDemandService.WasCreated);

            MockDemandService svc = services.Get <MockDemandService>();

            Assert.IsTrue(MockDemandService.WasCreated);
        }
        public void DemandAddedServiceEventsAreFiredAtTheRightTime()
        {
            bool AddedEventFired               = false;
            bool RemovedEventFired             = false;
            TestableServiceCollection services = CreateServiceCollection();

            services.Added   += delegate { AddedEventFired = true; };
            services.Removed += delegate { RemovedEventFired = true; };

            services.AddOnDemand <object>();
            Assert.IsFalse(AddedEventFired);
            Assert.IsFalse(RemovedEventFired);

            services.Get <object>();
            Assert.IsTrue(AddedEventFired);
            Assert.IsFalse(RemovedEventFired);

            services.Remove <object>();
            Assert.IsTrue(RemovedEventFired);
        }