示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#3
0
        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"]);
        }
示例#4
0
        /// <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;
        }
示例#6
0
        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>());
        }
示例#7
0
        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"));
        }
示例#8
0
        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"));
        }
示例#9
0
        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"));
        }
示例#10
0
        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);
        }
示例#11
0
 public void Setup()
 {
     m_container = new WindsorContainer();
     m_propertySubSystemInstaller = PropertiesSubSystem.FromAppConfig();
     m_container.Install(m_propertySubSystemInstaller);
 }