public void FrameworkContainerForCastle_Register_Test1()
        {
            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            container.RegisterType<IMockSimple, MockSimple>();

            container.Resolve<IMockSimple>().Say();
        }
        public void FrameworkContainerForCastle_Register_Dependency_Injection_Test1()
        {
            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            container.RegisterType<IMockSimple, MockSimple>();
            container.RegisterType<IMockConstructorInject, MockConstructorInject>();

            container.Resolve<IMockConstructorInject>().Depend();
        }
        public void FrameworkContainerForCastle_Property_Injection_Test()
        {
            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            container.RegisterType<IMockSimple, MockSimple>()
                .RegisterType<IMockPropertyInjection, MockPropertyInjection>();

            container.Resolve<IMockPropertyInjection>().Say();
        }
        public void FrameworkContainerForCastle_Register_Singleton_Test()
        {
            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            container.RegisterType<IMockSimple, MockSimple>(LifetimeFlag.Singleton);

            var obj = container.Resolve<IMockSimple>();
            obj.Name = "엄준일";

            obj = container.Resolve<IMockSimple>();

            Assert.IsTrue(obj.Name == "엄준일", "FrameworkContainer 에 Singleton 객체를 등록하였지만, 객체의 상태가 변했습니다");
        }
        public void FrameworkContainerForCastle_Register_PerCall_Test()
        {
            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            container.RegisterType<IMockSimple, MockSimple>(LifetimeFlag.PerCall);

            var obj = container.Resolve<IMockSimple>();
            obj.Name = "엄준일";

            obj = container.Resolve<IMockSimple>();

            Assert.IsTrue(obj.Name == null, "FrameworkContainer 에 PerCall 객체를 등록하였지만, 객체의 상태가 초기값과 다릅니다.");
        }
        private FrameworkContainerForCastle CompositionTheTypes(Type[] types)
        {
            FrameworkDependencyVisitor visitor = new FrameworkDependencyVisitor(types);
            var root = visitor.VisitTypes();

            WriteToSerialization(root);

            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            FrameworkCompositionResolverForCastle resolver = new FrameworkCompositionResolverForCastle(container, root);

            resolver.Compose();
            return container;
        }
        public void FrameworkContainerForCastle_With_Child_Container_Must_One_Child_Test1()
        {
            FrameworkContainerForCastle container = new FrameworkContainerForCastle();
            container.RegisterType<IMockSimple, MockSimple>();

            FrameworkContainerForCastleChild child = new FrameworkContainerForCastleChild("child", container);
            child.RegisterType<IMockConstructorInject, MockConstructorInject>();

            Assert.IsTrue( container.Childs.Count() == 1, "container 에 하나의 자식 Container 를 등록하였지만, Childs 개수가 {0} 이라 오류입니다.", container.Childs.Count());
        }