Exemplo n.º 1
0
        public void CachedLifetimeReturnsDifferentInstanceIfSlidingTimeoutHaveExpired()
        {
            using (var container = new IocContainer())
            {
                // Expires When not Accessed For More than a specific time periode.
                var lifetime = new CachedLifetime(new TimeSpan(0, 0, 1));

                container.Register<IFoo>(c => new Foo1()).SetLifetime(lifetime);

                var result1 = container.Resolve<IFoo>();
                var result2 = container.Resolve<IFoo>();

                // Simulate expiry
                Thread.Sleep(2000);

                var result3 = container.Resolve<IFoo>();

                // Assert
                Assert.IsNotNull(result1);
                Assert.IsNotNull(result2);
                Assert.IsNotNull(result3);

                Assert.AreSame(result1, result2);
                Assert.AreNotSame(result1, result3);
            }
        }
Exemplo n.º 2
0
        public void CachedLifetimeManagerReturnsDifferentObjectIfSlidingTimeExpired()
        {
            var cachedltm = new CachedLifetime()
                            .ExpiresAfterNotAccessedFor(new TimeSpan(0, 0, 2));

            var container = new Container();

            var ireg = container.Register <IFoo>(c => new Foo1())
                       .WithLifetimeManager(cachedltm);

            var result1 = container.Resolve <IFoo>();
            var result2 = container.Resolve <IFoo>();

            // simulate expiry
            Thread.Sleep(3000);

            var result3 = container.Resolve <IFoo>();

            Assert.IsNotNull(result1);
            Assert.IsNotNull(result2);
            Assert.IsNotNull(result3);

            Assert.AreSame(result1, result2);       // cache not expired
            Assert.AreNotSame(result2, result3);    // cache expired
        }
Exemplo n.º 3
0
        public void CallbackIsCalledWhenItemRemovedFromCache()
        {
            using (var iocContainer = new IocContainer())
            {
                var cachedltm = new CachedLifetime()
                                .ExpiresAfterNotAccessedFor(new TimeSpan(0, 0, 1))
                                .CallbackOnRemoval(RemovedCallback);

                iocContainer.Register <IFoo>(c => new Foo1())
                .WithLifetimeManager(cachedltm);

                itemRemoved = false;
                var result1 = iocContainer.Resolve <IFoo>();

                // simulate expiry
                Thread.Sleep(2000);
                var result2 = iocContainer.Resolve <IFoo>();

                Verify.That(result1).IsNotNull();
                Verify.That(result2).IsNotNull()
                .IsNotTheSameObjectAs(result1);

                Verify.That(itemRemoved).IsTrue();
            }
        }
Exemplo n.º 4
0
        public void CachedLifetimeManagerReturnsDifferentObjectIfAbsoluteTimeExpired()
        {
            var cachedltm = new CachedLifetime()
                            .ExpiresOn(DateTime.UtcNow.AddSeconds(2));

            var container = new Container();

            var ireg = container.Register <IFoo>(c => new Foo1())
                       .WithLifetimeManager(cachedltm);

            var result1 = container.Resolve <IFoo>();
            var result2 = container.Resolve <IFoo>();

            // simulate expiry
            Thread.Sleep(3000);

            var result3 = container.Resolve <IFoo>();

            Assert.IsNotNull(result1);
            Assert.IsNotNull(result2);
            Assert.IsNotNull(result3);

            Assert.AreSame(result1, result2);       // cache not expired
            Assert.AreNotSame(result2, result3);    // cache expired
        }
Exemplo n.º 5
0
        public void CanSetDefaultLifetimeManagerToCachedLifetime()
        {
            var lifetime = new CachedLifetime();

            iocContainer.UsesDefaultLifetimeManagerOf(lifetime);

            Verify.That(iocContainer.DefaultLifetimeManager).IsTheSameObjectAs(lifetime);
        }
Exemplo n.º 6
0
        public void IsDependentOnTest()
        {
            using (var iocContainer = new IocContainer())
            {
                var executionDirectory = Environment.CurrentDirectory;
                // create a file for the cached item to be dependent on
                var filePath = executionDirectory + "\\DependencyFile.txt";

                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }

                var dependencyFile = File.CreateText(filePath);

                dependencyFile.WriteLine("This is a file that the cache item is dependent on.");
                dependencyFile.Close();

                var cachedltm = new CachedLifetime()
                                .IsDependentOn(new CacheDependency(filePath));

                iocContainer.Register <IFoo>(c => new Foo1())
                .WithLifetimeManager(cachedltm);

                var result1 = iocContainer.Resolve <IFoo>();
                var result2 = iocContainer.Resolve <IFoo>();

                // change the dependency file
                dependencyFile = File.AppendText(filePath);
                dependencyFile.WriteLine("Modified dependecy file.");
                dependencyFile.Close();

                // need to give the system time to detect the change.
                Thread.Sleep(500);

                var result3 = iocContainer.Resolve <IFoo>();

                // cleanup
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }

                Verify.That(result3).IsNotNull();
                Verify.That(result1).IsNotNull()
                .IsTheSameObjectAs(result2)
                .IsNotTheSameObjectAs(result3);
            }
        }
Exemplo n.º 7
0
        public void CachedLifetimeIsDependentOnTest()
        {
            using (var container = new IocContainer())
            {
                var executionDirectory = Environment.CurrentDirectory;

                // Create a file for the cached item to be dependent on
                var filePath = executionDirectory + "\\DependencyFile.txt";

                if (File.Exists(filePath))
                    File.Delete(filePath);

                var dependencyFile = File.CreateText(filePath);

                dependencyFile.WriteLine("This is a file that the cache item is dependent on.");
                dependencyFile.Close();

                var cacheDependency = new CacheDependency(filePath);

                var lifetime = new CachedLifetime(cacheDependency);

                container.Register<IFoo>(c => new Foo1()).SetLifetime(lifetime);

                var result1 = container.Resolve<IFoo>();
                var result2 = container.Resolve<IFoo>();

                // Change the dependency file
                dependencyFile = File.AppendText(filePath);
                dependencyFile.WriteLine("Modified dependecy file.");
                dependencyFile.Close();

                // Need to give the system time to detect the change.
                Thread.Sleep(500);

                var result3 = container.Resolve<IFoo>();

                // cleanup
                if (File.Exists(filePath))
                    File.Delete(filePath);

                // Assert
                Assert.IsNotNull(result1);
                Assert.IsNotNull(result2);
                Assert.IsNotNull(result3);

                Assert.AreSame(result1, result2);
                Assert.AreNotSame(result1, result3);
            }
        }
Exemplo n.º 8
0
        public void CachedLifetimeManagerReturnsSameObjectIfCacheNotExpired()
        {
            var cachedltm = new CachedLifetime();

            iocContainer.Register <IFoo>(c => new Foo1())
            .WithLifetimeManager(cachedltm);

            var result1 = iocContainer.Resolve <IFoo>();
            var result2 = iocContainer.Resolve <IFoo>();

            var result3 = iocContainer.Resolve <IFoo>();

            Verify.That(result1).IsNotNull()
            .IsTheSameObjectAs(result2)
            .IsTheSameObjectAs(result3);
        }
Exemplo n.º 9
0
        public void CachedLifetimeManagerReturnsDifferentObjectIfCacheExpired()
        {
            var cachedltm = new CachedLifetime();

            var ireg = iocContainer.Register <IFoo>(c => new Foo1())
                       .WithLifetimeManager(cachedltm);

            var result1 = iocContainer.Resolve <IFoo>();
            var result2 = iocContainer.Resolve <IFoo>();

            // simulate expiry
            ireg.InvalidateInstanceCache();

            var result3 = iocContainer.Resolve <IFoo>();

            Verify.That(result1).IsNotNull()
            .IsTheSameObjectAs(result2)
            .IsNotTheSameObjectAs(result3);
            Verify.That(result3).IsNotNull();
        }
Exemplo n.º 10
0
        public void CachedLifetimeManagerReturnsDifferentObjectIfSlidingTimeExpired()
        {
            var cachedltm = new CachedLifetime()
                            .ExpiresAfterNotAccessedFor(new TimeSpan(0, 0, 1));

            var ireg = iocContainer.Register <IFoo>(c => new Foo1())
                       .WithLifetimeManager(cachedltm);

            var result1 = iocContainer.Resolve <IFoo>();
            var result2 = iocContainer.Resolve <IFoo>();

            // simulate expiry
            Thread.Sleep(2000);

            var result3 = iocContainer.Resolve <IFoo>();

            Verify.That(result1).IsNotNull()
            .IsTheSameObjectAs(result2)
            .IsNotTheSameObjectAs(result3);
            Verify.That(result3).IsNotNull();
        }
Exemplo n.º 11
0
        public void CachedLifetimeManagerReturnsDifferentObjectIfAbsoluteTimeExpired()
        {
            var cachedltm = new CachedLifetime()
                            .ExpiresOn(DateTime.UtcNow.AddSeconds(2));

            var ireg = iocContainer.Register <IFoo>(c => new Foo1())
                       .WithLifetimeManager(cachedltm);

            var result1 = iocContainer.Resolve <IFoo>();
            var result2 = iocContainer.Resolve <IFoo>();

            // simulate expiry
            Thread.Sleep(3000);

            var result3 = iocContainer.Resolve <IFoo>();

            Verify.That(result1).IsNotNull()
            .IsTheSameObjectAs(result2)
            .IsNotTheSameObjectAs(result3);
            Verify.That(result3).IsNotNull();
        }
Exemplo n.º 12
0
        public void CachedLifetimeManagerReturnsSameObjectIfCacheNotExpired()
        {
            var cachedltm = new CachedLifetime();

            var container = new Container();

            container.Register <IFoo>(c => new Foo1())
            .WithLifetimeManager(cachedltm);

            var result1 = container.Resolve <IFoo>();
            var result2 = container.Resolve <IFoo>();

            var result3 = container.Resolve <IFoo>();

            Assert.IsNotNull(result1);
            Assert.IsNotNull(result2);
            Assert.IsNotNull(result3);

            Assert.AreSame(result1, result2);    // same request
            Assert.AreSame(result2, result3);    // different request
        }
Exemplo n.º 13
0
        public void CallbackIsCalledWhenItemRemovedFromCache()
        {
            var cachedltm = new CachedLifetime()
                            .ExpiresAfterNotAccessedFor(new TimeSpan(0, 0, 2))
                            .CallbackOnRemoval(RemovedCallback);

            var container = new Container();

            var ireg = container.Register <IFoo>(c => new Foo1())
                       .WithLifetimeManager(cachedltm);

            itemRemoved = false;
            var result1 = container.Resolve <IFoo>();

            // simulate expiry
            Thread.Sleep(3000);
            var result2 = container.Resolve <IFoo>();

            Assert.IsNotNull(result1);
            Assert.IsNotNull(result2);
            Assert.AreNotSame(result1, result2);
            Assert.IsTrue(itemRemoved);
        }
Exemplo n.º 14
0
        public void CachedLifetimeManagerReturnsDifferentObjectIfCacheExpired()
        {
            var cachedltm = new CachedLifetime();

            var container = new Container();
            var ireg      = container.Register <IFoo>(c => new Foo1())
                            .WithLifetimeManager(cachedltm);

            var result1 = container.Resolve <IFoo>();
            var result2 = container.Resolve <IFoo>();

            // simulate expiry
            HttpRuntime.Cache.Remove(ireg.Id);

            var result3 = container.Resolve <IFoo>();

            Assert.IsNotNull(result1);
            Assert.IsNotNull(result2);
            Assert.IsNotNull(result3);

            Assert.AreSame(result1, result2);       // cache not expired
            Assert.AreNotSame(result2, result3);    // cache expired
        }
Exemplo n.º 15
0
        public void CachedLifetimeCallbackIsCalledWhenItemRemovedFromCache()
        {
            using (var container = new IocContainer())
            {
                var lifetime = new CachedLifetime(new TimeSpan(0, 0, 1), itemRemovedCallback: RemovedCallback);

                container.Register<IFoo>(c => new Foo1()).SetLifetime(lifetime);

                _itemRemoved = false;
                var result1 = container.Resolve<IFoo>();

                // Simulate expiry
                Thread.Sleep(2000);
                var result2 = container.Resolve<IFoo>();

                // Assert
                Assert.IsNotNull(result1);
                Assert.IsNotNull(result2);

                Assert.AreNotSame(result1, result2);
                Assert.IsTrue(_itemRemoved);
                Assert.IsTrue(_reason == CacheItemRemovedReason.Expired);
            }
        }
Exemplo n.º 16
0
        public void CachedLifetimeReturnsSameInstanceIfCacheNotExpired()
        {
            using (var container = new IocContainer())
            {
                var lifetime = new CachedLifetime(new TimeSpan(0, 0, 3));

                container.Register<IFoo>(c => new Foo1()).SetLifetime(lifetime);

                var result1 = container.Resolve<IFoo>();
                var result2 = container.Resolve<IFoo>();

                Thread.Sleep(1000);

                var result3 = container.Resolve<IFoo>();

                // Assert
                Assert.IsNotNull(result1);
                Assert.IsNotNull(result2);
                Assert.IsNotNull(result3);

                Assert.AreSame(result1, result2);
                Assert.AreSame(result1, result3);
            }
        }