public void GetService_Should_Not_Try_UnityContainer_Again_If_UnityContainer_Failed_To_Resolve_A_Type()
        {
            var container     = new Mock <IUnityContainer>();
            var isFirstCall   = true;
            var secondCalled  = false;
            var typeToResolve = typeof(TypeToResolveBase);

            container.Setup(sp => sp.Resolve(typeToResolve, "", null)).Callback(() =>
            {
                if (isFirstCall)
                {
                    isFirstCall = false;
                    throw new ResolutionFailedException(typeToResolve, "", "", null);
                }
                else
                {
                    secondCalled = true;
                }
            });

            var containerSP = new ContainerServiceProvider(null)
            {
                Container = container.Object
            };

            var resolvedObj = containerSP.GetService(typeToResolve);

            Assert.NotNull(resolvedObj);
            Assert.IsType(typeToResolve, resolvedObj);

            resolvedObj = containerSP.GetService(typeToResolve);
            Assert.NotNull(resolvedObj);
            Assert.IsType(typeToResolve, resolvedObj);
            Assert.False(secondCalled);
        }
        public void ContainerServiceProvider_Should_Preserve_Existing_ServiceProvider_And_Initialize_UnityContainer()
        {
            var existingSP  = new Mock <IServiceProvider>();
            var containerSP = new ContainerServiceProvider(existingSP.Object);

            Assert.Same(existingSP.Object, containerSP.NextServiceProvider);
            Assert.NotNull(containerSP.Container);
        }
        public void GetService_Should_Resolve_Type_EvenIf_Unity_Cannot_Resolve()
        {
            var containerSP = new ContainerServiceProvider(null);
            var resolvedObj = containerSP.GetService(typeof(TypeToResolveBase));

            Assert.NotNull(resolvedObj);
            Assert.IsType <TypeToResolveBase>(resolvedObj);
        }
        public void GetService_Should_Cache_Type_That_Cannot_Be_Resolved_By_UnityContainer()
        {
            var containerSP = new ContainerServiceProvider(null);
            var resolvedObj = containerSP.GetService(typeof(TypeToResolveBase));

            Assert.NotNull(resolvedObj);
            Assert.IsType <TypeToResolveBase>(resolvedObj);
            Assert.True(containerSP.TypeCannotResolveDictionary.ContainsKey(typeof(TypeToResolveBase)));
        }
Example #5
0
        public void GetService_Should_Use_Saved_ServiceProvider_If_UnityContainer_Cannot_Resolve()
        {
            var existingSP = new Mock <IServiceProvider>();

            existingSP.Setup(sp => sp.GetService(typeof(TypeToResolveBase))).Returns(new TypeToResolve());
            var containerSP = new ContainerServiceProvider(existingSP.Object);
            var resolvedObj = containerSP.GetService(typeof(TypeToResolveBase));

            Assert.NotNull(resolvedObj);
            Assert.IsType <TypeToResolve>(resolvedObj);
        }