public void ResolveDifferentObjectYieldsDifferentObjects()
        {
            var details1 = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var details2 = new RegistrationDetails
            {
                RegisteredType = typeof(ILifetimeManager),
                Instructions   = new BuildDetails()
            };

            var moqBuilder = new Mock <IObjectConstructor>();

            moqBuilder.Setup(t => t.Build(details1.Instructions)).Returns(new SimpleClass());
            moqBuilder.Setup(t => t.Build(details2.Instructions)).Returns(new TransientLifetimeManager());

            ILifetimeManager manager = new SingletonLifetimeManager(moqBuilder.Object);
            var obj1 = manager.CreateType(details1);
            var obj2 = manager.CreateType(details2);

            Assert.NotEqual(obj1, obj2);
        }
예제 #2
0
 internal Component(Type interfaceType, Type proxyType)
 {
     InterfaceType = interfaceType;
     _proxyType    = proxyType;
     // Default is singleton
     LifetimeManager = new SingletonLifetimeManager();
 }
        public void WorksWithConstructorAndPropertyInjection()
        {
            // --- Arrange
            var ltManager = new SingletonLifetimeManager
            {
                ServiceObjectType      = typeof(SampleObject),
                ConstructionParameters = new object[] { 12 },
                Properties             = new PropertySettingsCollection(new List <PropertySettings>
                {
                    new PropertySettings("Property1", "45"),
                    new PropertySettings("Property2", "hello")
                })
            };

            // --- Act
            var instance1 = ltManager.GetObject() as SampleObject;
            var instance2 = ltManager.GetObject() as SampleObject;

            // --- Assert
            instance1.ShouldNotBeNull();
            instance1.ShouldBeSameAs(instance2);
            // ReSharper disable PossibleNullReferenceException
            instance1.Property1.ShouldEqual(45);
            instance1.Property2.ShouldEqual("hello");
            // ReSharper restore PossibleNullReferenceException
        }
        public void ResolveSameObjectTwiceYieldsSameObject()
        {
            var details1 = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var details2 = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var returnClass = new SimpleClass();

            var moqBuilder = new Mock <IObjectConstructor>();

            moqBuilder.Setup(t => t.Build(details1.Instructions)).Returns(returnClass);
            moqBuilder.Setup(t => t.Build(details2.Instructions)).Returns(returnClass);


            ILifetimeManager manager = new SingletonLifetimeManager(moqBuilder.Object);
            var obj1 = manager.CreateType(details1);
            var obj2 = manager.CreateType(details2);

            Assert.Equal(obj1, obj2);
        }
예제 #5
0
        public static void RegisterSingleton(this IContainer container, Type fromType, Type toType, string key = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            var lifetimeManager = new SingletonLifetimeManager(toType, container);

            container.Register(lifetimeManager, fromType, key);
        }
        public void RegisteredInstanceReturnsRegisteredInstance()
        {
            var details = new RegistrationDetails
            {
                RegisteredType = typeof(ISimpleInterface),
                Instructions   = new BuildDetails()
            };

            var manager        = new SingletonLifetimeManager();
            var simpleInstance = new SimpleClass();

            manager.AddInstance(details.RegisteredType, simpleInstance);
            var returnInstance = manager.CreateType(details);

            Assert.Equal(simpleInstance, returnInstance);
        }
        public void WorksWithInstance()
        {
            // --- Arrange
            var ltManager = new SingletonLifetimeManager(new SampleObject());

            // --- Act
            var instance1 = ltManager.GetObject() as SampleObject;
            var instance2 = ltManager.GetObject() as SampleObject;

            // --- Assert
            instance1.ShouldNotBeNull();
            instance1.ShouldBeSameAs(instance2);
            // ReSharper disable PossibleNullReferenceException
            instance1.Property1.ShouldEqual(SampleObject.DEFAULT_INT);
            instance1.Property2.ShouldEqual(SampleObject.DEFAULT_STRING);
            // ReSharper restore PossibleNullReferenceException
        }
예제 #8
0
        public static void RegisterSingleton(this IContainer container, Type type, string key = null, Func <IResolver, object> factory = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            if (factory == null)
            {
                container.RegisterSingleton(type, type, key);
                return;
            }

            var lifetimeManager = new SingletonLifetimeManager(type, container, factory);

            container.Register(lifetimeManager, type, key);
        }
예제 #9
0
        private static LifetimeManager CreateLifeTime(LifeCycle lifeCycle)
        {
            LifetimeManager lifetimeManager = null;

            switch (lifeCycle)
            {
            case LifeCycle.Singleton:
            default:
                lifetimeManager = new SingletonLifetimeManager();
                break;

            case LifeCycle.Transient:
                lifetimeManager = new TransientLifetimeManager();
                break;
            }

            return(lifetimeManager);
        }
예제 #10
0
        public void TestLifetimeManagerRegisterResolve()
        {
            var dependency = new SimpleDependency();

            var lifetimeManager = new SingletonLifetimeManager(dependency);

            bool keepTrackObject;
            var  resolvedObject1 = lifetimeManager.Resolve(null, out keepTrackObject);

            Assert.IsNotNull(resolvedObject1);

            var resolvedObject2 = lifetimeManager.Resolve(null, out keepTrackObject);

            Assert.IsNotNull(resolvedObject2);

            Assert.AreSame(resolvedObject1, resolvedObject2);
            Assert.AreEqual(SimpleDependency.ActiveDependecies, 1);

            dependency.Dispose();
        }
        public void WorksWithConstructorParams2()
        {
            // --- Arrange
            var ltManager = new SingletonLifetimeManager
            {
                ServiceObjectType      = typeof(SampleObject),
                ConstructionParameters = new object[] { 23 }
            };

            // --- Act
            var instance1 = ltManager.GetObject() as SampleObject;
            var instance2 = ltManager.GetObject() as SampleObject;

            // --- Assert
            instance1.ShouldNotBeNull();
            instance1.ShouldBeSameAs(instance2);
            // ReSharper disable PossibleNullReferenceException
            instance1.Property1.ShouldEqual(23);
            instance1.Property2.ShouldEqual(SampleObject.DEFAULT_STRING);
            // ReSharper restore PossibleNullReferenceException
        }
        public void WorksWithReset()
        {
            // --- Arrange
            var ltManager = new SingletonLifetimeManager
            {
                ServiceObjectType = typeof(SampleObject)
            };

            // --- Act
            var instance1 = ltManager.GetObject() as SampleObject;

            ltManager.ResetState();
            var instance2 = ltManager.GetObject() as SampleObject;
            var instance3 = ltManager.GetObject() as SampleObject;

            // --- Assert
            instance1.ShouldNotBeNull();
            instance2.ShouldNotBeNull();
            instance1.ShouldNotBeSameAs(instance2);
            instance2.ShouldBeSameAs(instance3);
        }