/// <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>()); }
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); }
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); }
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); }
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); }
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); }
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>()); }
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); }
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); }
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>()); }
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); }