Пример #1
0
        /// <summary>
        /// Registers the commands that derived from ICommand and their dependencies
        /// into IoC container.
        /// </summary>
        /// todo: move to configuration file
        static void RegisterComponents()
        {
            //register CreateSpreadsheetCommand with the key "C"
            _container.Register(Component.For <SpreadsheetCommand>()
                                .ImplementedBy <CreateSpreadsheetCommand>()
                                .DependsOn(Dependency.OnValue("cmdKey", "C"))
                                );

            //register UpdateSpreadsheetCommand with key "N"
            _container.Register(Component.For <SpreadsheetCommand>()
                                .ImplementedBy <UpdateSpreadsheetCommand>()
                                .DependsOn(Dependency.OnValue("cmdKey", "N"))

                                );

            //register SumSpreadsheetCommand with key "S"
            _container.Register(Component.For <SpreadsheetCommand>()
                                .ImplementedBy <SumSpreadsheetCommand>()
                                .DependsOn(Dependency.OnValue("cmdKey", "S"))
                                );

            //register the SpreadsheetCmdCollection that hold the Commands Instances
            //Command Instances will be injected into Collection by IoC Container
            _container.Register(Component.For <SpreadsheetCmdCollection>());

            //register the SpreadsheetPrinter that display spreadsheet in text format
            _container.Register(Component.For <ISheetPrinter>()
                                .ImplementedBy <SpreadsheetPrinter>());
        }
Пример #2
0
        public void HandlerSelector_HasDefault()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For <TestMain2>().LifeStyle.Transient);
            Assert.IsFalse(windsor.Resolve <TestMain2>().Resolved);

            var h = new TestHandlerSelector_HasDefault();

            windsor.Kernel.AddHandlerSelector(h);
            //原始默认组件
            windsor.Register(Component.For <ITest>().ImplementedBy <Test1>());
            //新组件
            windsor.Register(Component.For <ITest>().ImplementedBy <Test2>());

            //通过HandlerSelector启用新组件为默认组件
            h.Enable = true;
            Assert.IsTrue(windsor.Resolve <TestMain2>().Resolved);
            Assert.IsInstanceOf <Test2>(windsor.Resolve <TestMain2>().Dependency);

            //通过HandlerSelector取消新组件
            h.Enable = false;
            Assert.IsTrue(windsor.Resolve <TestMain2>().Resolved);
            //切换回原默认组件
            Assert.IsInstanceOf <Test1>(windsor.Resolve <TestMain2>().Dependency);
        }
Пример #3
0
        public void HandlerSelector()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            ServiceFramework.Configuration.Configure().Castle(windsor).Endpoint();
            var c = (ServiceFramework.Configuration.Instance() as ConfigurationWithCastle).WindsorContainer;

            windsor.Resolve <RemoteServiceInterceptor>();
            Assert.Throws(typeof(Castle.MicroKernel.Handlers.HandlerException)
                          , () => windsor.Resolve <CodeSharp.ServiceFramework.Castles.WindsorContainer.RemovedInterceptor>());

            //首次依赖不满足
            windsor.Register(Component.For <TestMain2>().LifeStyle.Transient);
            Assert.IsFalse(windsor.Resolve <TestMain2>().Resolved);
            //注册远程组件
            c.RegisterRemoteServices(typeof(ITest));
            Assert.IsTrue(windsor.Resolve <TestMain2>().Resolved);
            //卸载远程组件
            c.ClearRemoteServices(typeof(ITest));
            Assert.IsFalse(windsor.Resolve <TestMain2>().Resolved);
            //本地实现注册
            windsor.Register(Component.For <ITest>().ImplementedBy <Test1>().IsDefault());
            Assert.IsTrue(windsor.Resolve <TestMain2>().Resolved);
            Assert.IsInstanceOf <Test1>(windsor.Resolve <TestMain2>().Dependency);
            //重新注册远程组件
            c.RegisterRemoteServices(typeof(ITest));
            Assert.IsTrue(windsor.Resolve <TestMain2>().Resolved);
            Assert.IsNotInstanceOf <Test1>(windsor.Resolve <TestMain2>().Dependency);
        }
Пример #4
0
        public void DefaultComponentForServiceFilter()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For <ITest>().ImplementedBy <Test1>().LifeStyle.Transient);
            Assert.AreEqual(typeof(Test1), windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.Implementation);

            windsor.Register(Component.For <ITest>().ImplementedBy <Test2>().LifeStyle.Transient.IsDefault());
            Assert.AreEqual(typeof(Test2), windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.Implementation);

            //移除默认组件标记
            var handler = windsor.Kernel.GetHandler(typeof(ITest));

            handler.ComponentModel.ExtendedProperties.Remove(Constants.DefaultComponentForServiceFilter);
            //handler.Init(windsor.Kernel as IKernelInternal);
            //(windsor.Kernel as IKernelInternal).RegisterHandler(handler.ComponentModel.Name + Guid.NewGuid(), handler, false);
            var naming = windsor.Kernel.GetSubSystem(SubSystemConstants.NamingKey) as Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem;

            //由于默认组件在注册时已经确定,无法后期修改
            //https://github.com/castleproject/Castle.Windsor-READONLY/blob/master/src/Castle.Windsor/MicroKernel/SubSystems/Naming/DefaultNamingSubSystem.cs

            Assert.IsFalse(windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.ExtendedProperties.Contains(Constants.DefaultComponentForServiceFilter));
            return;

            Assert.AreEqual(typeof(Test1), windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.Implementation);
        }
Пример #5
0
        public void ConstructorDependency()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For<TestMain1>().LifeStyle.Transient);
            Assert.IsFalse(windsor.Resolve<TestMain1>().Resolved);

            windsor.Register(Component.For<ITest>().ImplementedBy<Test1>());
            Assert.IsTrue(windsor.Resolve<TestMain1>().Resolved);
        }
Пример #6
0
        public void ConstructorDependency()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For <TestMain1>().LifeStyle.Transient);
            Assert.IsFalse(windsor.Resolve <TestMain1>().Resolved);

            windsor.Register(Component.For <ITest>().ImplementedBy <Test1>());
            Assert.IsTrue(windsor.Resolve <TestMain1>().Resolved);
        }
Пример #7
0
        public void IsDefault()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For <ITest>().ImplementedBy <Test1>());
            Assert.IsInstanceOf <Test1>(windsor.Resolve <ITest>());

            windsor.Register(Component.For <ITest>().ImplementedBy <Test2>().IsDefault());
            Assert.IsInstanceOf <Test2>(windsor.Resolve <ITest>());

            //不支持注册Null
            Assert.Throws(typeof(ArgumentNullException), () => windsor.Register(Component.For <ITest>().Instance(null).IsDefault()));

            //覆盖默认组件为“没有设置proxy”
            //非法的注册总是导致失败
            windsor.Register(Component.For <ITest>().IsDefault());
            Assert.Throws(typeof(Castle.MicroKernel.ComponentRegistrationException), () => windsor.Resolve <ITest>());
        }
Пример #8
0
        public void DefaultComponentForServiceFilter()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For<ITest>().ImplementedBy<Test1>().LifeStyle.Transient);
            Assert.AreEqual(typeof(Test1), windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.Implementation);

            windsor.Register(Component.For<ITest>().ImplementedBy<Test2>().LifeStyle.Transient.IsDefault());
            Assert.AreEqual(typeof(Test2), windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.Implementation);

            //移除默认组件标记
            var handler = windsor.Kernel.GetHandler(typeof(ITest));
            handler.ComponentModel.ExtendedProperties.Remove(Constants.DefaultComponentForServiceFilter);
            //handler.Init(windsor.Kernel as IKernelInternal);
            //(windsor.Kernel as IKernelInternal).RegisterHandler(handler.ComponentModel.Name + Guid.NewGuid(), handler, false);
            var naming = windsor.Kernel.GetSubSystem(SubSystemConstants.NamingKey) as Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem;

            //由于默认组件在注册时已经确定,无法后期修改
            //https://github.com/castleproject/Castle.Windsor-READONLY/blob/master/src/Castle.Windsor/MicroKernel/SubSystems/Naming/DefaultNamingSubSystem.cs

            Assert.IsFalse(windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.ExtendedProperties.Contains(Constants.DefaultComponentForServiceFilter));
            return;
            Assert.AreEqual(typeof(Test1), windsor.Kernel.GetHandler(typeof(ITest)).ComponentModel.Implementation);
        }
Пример #9
0
        public void HandlerSelector()
        {
            var windsor = new Castle.Windsor.WindsorContainer();
            ServiceFramework.Configuration.Configure().Castle(windsor).Endpoint();
            var c = (ServiceFramework.Configuration.Instance() as ConfigurationWithCastle).WindsorContainer;
            windsor.Resolve<RemoteServiceInterceptor>();
            Assert.Throws(typeof(Castle.MicroKernel.Handlers.HandlerException)
                , () => windsor.Resolve<CodeSharp.ServiceFramework.Castles.WindsorContainer.RemovedInterceptor>());

            //首次依赖不满足
            windsor.Register(Component.For<TestMain2>().LifeStyle.Transient);
            Assert.IsFalse(windsor.Resolve<TestMain2>().Resolved);
            //注册远程组件
            c.RegisterRemoteServices(typeof(ITest));
            Assert.IsTrue(windsor.Resolve<TestMain2>().Resolved);
            //卸载远程组件
            c.ClearRemoteServices(typeof(ITest));
            Assert.IsFalse(windsor.Resolve<TestMain2>().Resolved);
            //本地实现注册
            windsor.Register(Component.For<ITest>().ImplementedBy<Test1>().IsDefault());
            Assert.IsTrue(windsor.Resolve<TestMain2>().Resolved);
            Assert.IsInstanceOf<Test1>(windsor.Resolve<TestMain2>().Dependency);
            //重新注册远程组件
            c.RegisterRemoteServices(typeof(ITest));
            Assert.IsTrue(windsor.Resolve<TestMain2>().Resolved);
            Assert.IsNotInstanceOf<Test1>(windsor.Resolve<TestMain2>().Dependency);
        }
Пример #10
0
        public void IsDefault()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For<ITest>().ImplementedBy<Test1>());
            Assert.IsInstanceOf<Test1>(windsor.Resolve<ITest>());

            windsor.Register(Component.For<ITest>().ImplementedBy<Test2>().IsDefault());
            Assert.IsInstanceOf<Test2>(windsor.Resolve<ITest>());

            //不支持注册Null
            Assert.Throws(typeof(ArgumentNullException), () => windsor.Register(Component.For<ITest>().Instance(null).IsDefault()));

            //覆盖默认组件为“没有设置proxy”
            //非法的注册总是导致失败
            windsor.Register(Component.For<ITest>().IsDefault());
            Assert.Throws(typeof(Castle.MicroKernel.ComponentRegistrationException), () => windsor.Resolve<ITest>());
        }
Пример #11
0
        public void HandlerSelector_HasDefault()
        {
            var windsor = new Castle.Windsor.WindsorContainer();

            windsor.Register(Component.For<TestMain2>().LifeStyle.Transient);
            Assert.IsFalse(windsor.Resolve<TestMain2>().Resolved);

            var h = new TestHandlerSelector_HasDefault();
            windsor.Kernel.AddHandlerSelector(h);
            //原始默认组件
            windsor.Register(Component.For<ITest>().ImplementedBy<Test1>());
            //新组件
            windsor.Register(Component.For<ITest>().ImplementedBy<Test2>());

            //通过HandlerSelector启用新组件为默认组件
            h.Enable = true;
            Assert.IsTrue(windsor.Resolve<TestMain2>().Resolved);
            Assert.IsInstanceOf<Test2>(windsor.Resolve<TestMain2>().Dependency);

            //通过HandlerSelector取消新组件
            h.Enable = false;
            Assert.IsTrue(windsor.Resolve<TestMain2>().Resolved);
            //切换回原默认组件
            Assert.IsInstanceOf<Test1>(windsor.Resolve<TestMain2>().Dependency);
        }