public async void ActivatingAppContainer_ActivatesServices()
        {
            var info            = CreateAppContainer();
            var serviceCallList = new List <string>();
            var service         = new MockLifetimeAwareService("Service", serviceCallList);

            info.AppContainer.LifetimeManager.Register(service);
            await info.AppContainer.Activate();

            Assert.Equal(new string[] { "Service - Activate" }, serviceCallList);
        }
        public async void DeactivatingAppContainer_DeactivatesChildContainerServices()
        {
            var info            = CreateAppContainerWithChild();
            var serviceCallList = new List <string>();
            var service         = new MockLifetimeAwareService("Child Service", serviceCallList);

            info.ChildAppContainer.LifetimeManager.Register(service);
            await info.ParentAppContainer.Deactivate();

            Assert.Equal(new string[] { "Child Service - Deactivate" }, serviceCallList);
        }
        public void RegisterService_ThrowsException_IfServiceIsRegisteredMultipleTimes()
        {
            var lifetimeManagerSource = new LifetimeManagerSource();
            var lifetimeManager       = lifetimeManagerSource.LifetimeManager;

            var service = new MockLifetimeAwareService();

            lifetimeManager.Register(service);
            var e = Assert.Throws <InvalidOperationException>(() => lifetimeManager.Register(service));

            Assert.Equal("You cannot register a service multiple times.", e.Message);
        }
        public async void ActivatingAppContainer_ActivatesParentBeforeChild()
        {
            var info            = CreateAppContainerWithChild();
            var serviceCallList = new List <string>();
            var parentService   = new MockLifetimeAwareService("Parent Service", serviceCallList);
            var childService    = new MockLifetimeAwareService("Child Service", serviceCallList);

            info.ParentAppContainer.LifetimeManager.Register(parentService);
            info.ChildAppContainer.LifetimeManager.Register(childService);
            await info.ParentAppContainer.Activate();

            Assert.Equal(new string[] { "Parent Service - Activate", "Child Service - Activate" }, serviceCallList);
        }
        public void UnregisterService_ThrowsException_IfServiceIsNotRegistered()
        {
            var lifetimeManagerSource = new LifetimeManagerSource();
            var lifetimeManager       = lifetimeManagerSource.LifetimeManager;

            var service1 = new MockLifetimeAwareService();
            var service2 = new MockLifetimeAwareService();

            lifetimeManager.Register(service1);
            var e = Assert.Throws <InvalidOperationException>(() => lifetimeManager.Unregister(service2));

            Assert.Equal("Cannot unregister the service as it is not currently registered.", e.Message);
        }
        public async void DisposingChildContainer_DoesNotReceiveFurtherDeactivations()
        {
            var info            = CreateAppContainerWithChild();
            var serviceCallList = new List <string>();
            var service         = new MockLifetimeAwareService("Child Service", serviceCallList);

            info.ChildAppContainer.LifetimeManager.Register(service);
            info.ChildAppContainer.Dispose();

            serviceCallList.Clear();
            await info.ParentAppContainer.Deactivate();

            Assert.Equal(new string[] { }, serviceCallList);
        }
        public async void Deactivate_WithSingleService_DeactivatesService()
        {
            var lifetimeManagerSource = new LifetimeManagerSource();
            var lifetimeManager       = lifetimeManagerSource.LifetimeManager;

            var service1 = new MockLifetimeAwareService();

            lifetimeManager.Register(service1);

            await lifetimeManagerSource.Deactivate();

            Assert.Equal(0, service1.ActivateCount);
            Assert.Equal(1, service1.DeactivateCount);
        }
        public async void Dectivate_UnregisteredService_DoesNotDectivate()
        {
            var lifetimeManagerSource = new LifetimeManagerSource();
            var lifetimeManager       = lifetimeManagerSource.LifetimeManager;

            var service1 = new MockLifetimeAwareService();

            lifetimeManager.Register(service1);
            lifetimeManager.Unregister(service1);

            await lifetimeManagerSource.Deactivate();

            Assert.Equal(0, service1.ActivateCount);
            Assert.Equal(0, service1.DeactivateCount);
        }