public void Get_Resolver_DoesNot_Throws_Exception_Once_SubSystem_Is_Initialised() { // arrange string path = EmbeddedResourceUtil.ExportToPath("Castle.Windsor.Extensions.Test.data", "castle.config", Path.GetTempPath()); PropertiesSubSystem subSystem = new PropertiesSubSystem(path); WindsorContainer container = new WindsorContainer(); container.Kernel.AddSubSystem(PropertiesSubSystem.SubSystemKey, subSystem); KernelException actual = null; IPropertyResolver resolver = null; // act try { resolver = subSystem.Resolver; } catch (KernelException e) { actual = e; } // assert Assert.IsNull(actual); Assert.IsNotNull(resolver); }
public void Get_Resolver_Throws_Exception_If_SubSystem_Not_Initialised() { // arrange string path = EmbeddedResourceUtil.ExportToPath("Castle.Windsor.Extensions.Test.data", "invalid-castle.config", Path.GetTempPath()); PropertiesSubSystem subSystem = new PropertiesSubSystem(path); const string expectedMessagePrefix = "Error processing node castle"; string actualMessage = string.Empty; IPropertyResolver resolver = null; // act try { resolver = subSystem.Resolver; WindsorContainer container = new WindsorContainer(); container.Kernel.AddSubSystem(PropertiesSubSystem.SubSystemKey, subSystem); } catch (ConfigurationProcessingException e) { actualMessage = e.Message; } // assert Assert.IsNull(resolver); Assert.IsTrue(actualMessage.StartsWith(expectedMessagePrefix)); }
public void SubSystem_From_Json_File_Initialises_Properly() { // arrange string path = EmbeddedResourceUtil.ExportToPath("Castle.Windsor.Extensions.Test.data", "castle.json", Path.GetTempPath()); PropertiesSubSystem subsystem = new PropertiesSubSystem(path); WindsorContainer container = new WindsorContainer(); // act subsystem.Init((IKernelInternal)container.Kernel); // assert Assert.AreEqual("mihir", subsystem.Resolver.GetValue("name")); CollectionAssert.AreEqual(new[] { "chess", "cricket" }, subsystem.Resolver.GetValue <string[]>("hobbies")); IDictionary <string, string> extrasStuffMixed = subsystem.Resolver.GetValue <Dictionary <string, string> >("extraStuffMixed"); Assert.AreEqual("31", extrasStuffMixed["age"]); Assert.AreEqual("male", extrasStuffMixed["sex"]); IDictionary <string, double> extrasStuffFloats = subsystem.Resolver.GetValue <Dictionary <string, double> >("extraStuffFloats"); Assert.AreEqual(4.0, extrasStuffFloats["precision"]); Assert.AreEqual(2.56, extrasStuffFloats["start"]); }
/// <summary> /// Creates the dependency descripter for the current component registration /// </summary> /// <param name="kernel">Current <see cref="IKernel" /></param> private void CreateDependencyDescripters(IKernel kernel) { PropertiesSubSystem subsystem = kernel.GetSubSystem <PropertiesSubSystem>(PropertiesSubSystem.SubSystemKey); if (subsystem == null) { throw new DependencyResolverException("Unable to create component dependencies. No properties resolver found. You must register a PropertiesSubSystem instance with the container"); } List <Parameter> parameters = new List <Parameter>(); foreach (KeyValuePair <string, string> kv in m_dependencyMapping) { if (!subsystem.Resolver.CanResolve(kv.Value)) { throw new ConfigurationProcessingException("No config property with name '" + kv.Value + "' found"); } Parameter p = Parameter.ForKey(kv.Key).Eq(subsystem.Resolver.GetConfig(kv.Value)); parameters.Add(p); } if (m_services.Count > 0) { AddDescriptor(new ServiceOverrideDescriptor(m_services.ToArray())); } if (m_properties.Count > 0) { AddDescriptor(new ResolvableDependencyDescriptor(m_properties.ToArray())); } if (parameters.Count > 0) { AddDescriptor(new ParametersDescriptor(parameters.ToArray())); } }
/// <summary> /// Contribute to component model before standard <see cref="IContributeComponentModelConstruction" /> run. /// </summary> /// <param name="kernel"></param> /// <param name="model"></param> public override void BuildComponentModel(IKernel kernel, ComponentModel model) { PropertyInfo[] props = model.Implementation.GetProperties(); m_implPropertyTypes = props.ToDictionary(k => k.Name, v => v); PropertiesSubSystem subsystem = kernel.GetSubSystem <PropertiesSubSystem>(PropertiesSubSystem.SubSystemKey); m_resolver = subsystem.Resolver; }
public void GetValue_Simple_Works_As_Expected() { // arrange string path = EmbeddedResourceUtil.ExportToPath("Castle.Windsor.Extensions.Test.data", "castle.config", Path.GetTempPath()); PropertiesSubSystem subSystem = new PropertiesSubSystem(path); WindsorContainer container = new WindsorContainer(); container.Kernel.AddSubSystem(PropertiesSubSystem.SubSystemKey, subSystem); IConversionManager manager = (IConversionManager)container.Kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey); manager.Add(new PersonTypeConverter()); IPropertyResolver resolver = subSystem.Resolver; // act string strParam = resolver.GetValue("strParam"); double dblParam = resolver.GetValue <double>("dblParam"); string[] arrParam = resolver.GetValue <string[]>("arrParam"); IDictionary <string, string> dictParam = resolver.GetValue <IDictionary <string, string> >("dictParam"); List <double> listParam = resolver.GetValue <List <double> >("listParam"); Person[] personArr = resolver.GetValue <Person[]>("personArr"); // assert Assert.AreEqual("this is string", strParam); Assert.AreEqual(20.12, dblParam); Assert.AreEqual("arr item 1", arrParam[0]); Assert.AreEqual(strParam, arrParam[1]); Assert.AreEqual(@"..\etc\config.ini", arrParam[2]); Assert.IsTrue(dictParam.ContainsKey("key1")); Assert.IsTrue(dictParam.ContainsKey("key2")); Assert.AreEqual("value 1", dictParam["key1"]); Assert.AreEqual("value 2", dictParam["key2"]); Assert.AreEqual(21.2, listParam[0]); Assert.AreEqual(3, listParam[1]); Assert.AreEqual(dblParam, listParam[2]); Assert.AreEqual("Mihir", personArr[0].Name); Assert.AreEqual(30, personArr[0].PersonAge); Assert.AreEqual("Sneha", personArr[1].Name); Assert.AreEqual(33, personArr[1].PersonAge); // act Dependency[] dependencies = resolver.TryGetDependencies <TestClass>("strParam", "arrParam", "refParam", "dictParam", "listParam", "personArr"); container.Register(Component.For <TestClass>().DependsOn(dependencies)); // assert Assert.IsNotNull(container.Resolve <TestClass>()); }
public void Ctor_With_No_Parameters_Test() { // act PropertyResolvingWindsorContainer container = new PropertyResolvingWindsorContainer(); // assert Assert.IsInstanceOf <PropertiesInterpreter>(container.Interpreter); // get properties subsystem from kernel PropertiesSubSystem subsystem = container.Kernel.GetSubSystem <PropertiesSubSystem>(PropertiesSubSystem.SubSystemKey); // assert Assert.IsNotNull(subsystem); Assert.AreEqual("Mihir", subsystem.Resolver.GetValue("name")); }
public void FromAppConfig_Returns_Correct_Installer() { // arrange IWindsorContainer container = new WindsorContainer(); IWindsorInstaller installer = PropertiesSubSystem.FromAppConfig(); // act container.Install(installer); // assert PropertiesSubSystem subsystem = container.Kernel.GetSubSystem <PropertiesSubSystem>(PropertiesSubSystem.SubSystemKey); Assert.AreEqual("Mihir", subsystem.Resolver.GetValue("name")); Assert.AreEqual(31, subsystem.Resolver.GetValue <int>("age")); }
public void Ctor_Test() { // arrange string path = EmbeddedResourceUtil.ExportToPath("Castle.Windsor.Extensions.Test.data", "castle.config", Path.GetTempPath()); // act PropertyResolvingWindsorContainer container = new PropertyResolvingWindsorContainer(path); // assert Assert.IsInstanceOf <PropertiesInterpreter>(container.Interpreter); // get properties subsystem from kernel PropertiesSubSystem subsystem = container.Kernel.GetSubSystem <PropertiesSubSystem>(PropertiesSubSystem.SubSystemKey); // assert Assert.IsNotNull(subsystem); Assert.AreEqual("this is string", subsystem.Resolver.GetValue("strParam")); }
public void RelativePathSubDependencyResolver_Resolves_RelativePaths_As_Expected_With_PropertiesResolver() { // arrange string path = EmbeddedResourceUtil.ExportToPath("Castle.Windsor.Extensions.Test.data", "relpath-castle-with-propertiesresolver.config", m_tempPath); const string connString = "server=localhost;user=sa"; PropertiesSubSystem subSystem = new PropertiesSubSystem(path); WindsorContainer container = new WindsorContainer(); container.Kernel.AddSubSystem(PropertiesSubSystem.SubSystemKey, subSystem); container.Kernel.Resolver.AddSubResolver(new RelativePathSubDependencyResolver(container.Kernel)); container.Register(Component .For <SqlConnection>() .DependsOn(Dependency.OnValue("connectionString", subSystem.Resolver.GetValue("dbConnectionString")))); container.Register(Component .For <RelPathTestClass>() .DependsOn( subSystem.Resolver.GetDependency <string>("pathParam"), subSystem.Resolver.GetDependency <string[]>("pathArrParam"), Dependency.OnComponent("mySqlConnection", typeof(SqlConnection)) )); // act RelPathTestClass obj = container.Resolve <RelPathTestClass>(); // assert Assert.IsNotNull(obj); Assert.AreEqual(m_getFullPath(@"..\etc\config.ini"), obj.PathParam); Assert.AreEqual(3, obj.PathArrParam.Length); Assert.AreEqual(m_getFullPath(@"..\etc\config1.ini"), obj.PathArrParam[0]); if (!PlatformHelper.IsUnix()) { Assert.AreEqual(@"C:\temp.ini", obj.PathArrParam[1]); } Assert.AreEqual(m_getFullPath(@"..\etc\second.ini"), obj.PathArrParam[2]); Assert.AreEqual(connString, obj.MySqlConnection.ConnectionString); }
public void Setup() { m_container = new WindsorContainer(); m_propertySubSystemInstaller = PropertiesSubSystem.FromAppConfig(); m_container.Install(m_propertySubSystemInstaller); }