public void OverridesDoNotApplyOnDifferentNamedTypeRegistered()
        {
            // Load the container details from the config file.
            IUnityContainer container = ConfigurationFixtureBase.GetContainer(@"ConfigFiles\PropertyOverride.config",
                "PropertyOverrideContainer");

            // Resolve using the type mentioned in the config files.
            var defaultConfigResult = container.Resolve<TestTypeInConfig>("MyTestTypeToOverride");

            // The default values in the config files should be present.
            Assert.AreEqual<int>(101, defaultConfigResult.Value);
            Assert.AreEqual<int>(-111, defaultConfigResult.X);
            Assert.AreEqual<string>("DefaultFromConfigFile", defaultConfigResult.Y);

            // Create the PropertyOverrides object.
            PropertyOverrides overrides = new PropertyOverrides();
            overrides.Add("X", 9999);
            overrides.Add("Y", "Overridden");

            // Resolve using the wrong type(only construction injection info available, no property injection info) mentioned in the config files.
            // Override is ignored.
            var overriddenResult = container.Resolve<TestTypeInConfig>("DefaultConstructor", overrides);

            // The default values in the config files should be retained.
            Assert.AreEqual<int>(1001, overriddenResult.Value);
            Assert.AreEqual<int>(0, overriddenResult.X);
            Assert.AreEqual<string>(null, overriddenResult.Y);
        }
Beispiel #2
0
        private string ComputePropertyValue(ITaskItem element, string metadataName, string propertyValue, bool isRequired = true)
        {
            if (PropertyOverrides != null && PropertyOverrides.Any(a => string.Equals(a.ItemSpec, metadataName, StringComparison.OrdinalIgnoreCase)))
            {
                return(propertyValue);
            }

            var value = element.GetMetadata(metadataName);

            if (string.IsNullOrEmpty(value))
            {
                if (propertyValue == null && isRequired)
                {
                    Log.LogError("No metadata '{0}' was present for item '{1}' and no default value was provided.",
                                 metadataName,
                                 element.ItemSpec);

                    return(null);
                }
                else
                {
                    return(propertyValue);
                }
            }
            else
            {
                return(value);
            }
        }
        public void OverridesDoNotApplyOnDifferentNamedTypeRegistered()
        {
            // Load the container details from the config file.
            IUnityContainer container = ConfigurationFixtureBase.GetContainer(@"ConfigFiles\PropertyOverride.config",
                                                                              "PropertyOverrideContainer");

            // Resolve using the type mentioned in the config files.
            var defaultConfigResult = container.Resolve <TestTypeInConfig>("MyTestTypeToOverride");

            // The default values in the config files should be present.
            Assert.AreEqual <int>(101, defaultConfigResult.Value);
            Assert.AreEqual <int>(-111, defaultConfigResult.X);
            Assert.AreEqual <string>("DefaultFromConfigFile", defaultConfigResult.Y);

            // Create the PropertyOverrides object.
            PropertyOverrides overrides = new PropertyOverrides();

            overrides.Add("X", 9999);
            overrides.Add("Y", "Overridden");

            // Resolve using the wrong type(only construction injection info available, no property injection info) mentioned in the config files.
            // Override is ignored.
            var overriddenResult = container.Resolve <TestTypeInConfig>("DefaultConstructor", overrides);

            // The default values in the config files should be retained.
            Assert.AreEqual <int>(1001, overriddenResult.Value);
            Assert.AreEqual <int>(0, overriddenResult.X);
            Assert.AreEqual <string>(null, overriddenResult.Y);
        }
        public void CanOverrideMultipleInjectionPropertiesWithOverrideCollection()
        {
            TypeToInjectForPropertyOverride1 defaultObject  = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);
            int defaultValue            = 111;
            int overrideValue           = 222;
            PropertyOverrides overrides = new PropertyOverrides();

            overrides.Add("X", overrideValue);
            overrides.Add("InjectedObject", overrideObject);

            IUnityContainer container = new UnityContainer();

            container.RegisterType <SubjectType1ToInjectForPropertyOverride>(
                new InjectionProperty("InjectedObject", defaultObject), new InjectionProperty("X", defaultValue));
            var result1 =
                (SubjectType1ToInjectForPropertyOverride)
                container.Resolve(typeof(SubjectType1ToInjectForPropertyOverride), overrides);
            var result2 = container.Resolve <SubjectType1ToInjectForPropertyOverride>();

            Assert.IsInstanceOfType(result1.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.AreEqual <int>(result1.X, overrideValue);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
            Assert.AreEqual <int>(result2.X, defaultValue);
        }
        private ErrorCode GenerateSolution()
        {
            if (SkipGenerateCommand)
            {
                return(ErrorCode.Success);
            }

            Log.Debug("Config = " + SolutionConfigFile.FullName);
            Log.Debug("Define Symbols =");
            if (defineSymbols.Count > 0)
            {
                Log.IndentedCollection(defineSymbols, Log.Debug);
            }
            Log.Debug("Variables =");
            if (Variables.Count > 0)
            {
                Log.IndentedCollection(Variables, kvp => $"{kvp.Key} => {kvp.Value}", Log.Debug);
            }

            try
            {
                solution = GetGenerator();
                solution.GenerateSolution(
                    MasterConfiguration,
                    defineSymbols.ToArray(),
                    PropertyOverrides.ToArray(),
                    string.IsNullOrEmpty(BuildConfiguration) ? null : new[] { BuildConfiguration });

                // If MasterConfiguration was null or empty, the generator will select a default.
                MasterConfiguration = solution.MasterConfiguration;
            }
            catch (Exception ex)
            {
                Log.Error("{0}", ex.ToString());
                return(ErrorCode.GeneratorException);
            }

            File.WriteAllText(Path.Combine(solution.Solution.OutputDir, solution.Solution.Name + ".sln.config"),
                              "MasterConfiguration=" + MasterConfiguration);

            return(ErrorCode.Success);
        }
        public void PropertyOverrideWithDefaultInConfig()
        {
            TestTypeInConfig overrideObject = new TestTypeInConfig(666);

            IUnityContainer container = ConfigurationFixtureBase.GetContainer(@"ConfigFiles\PropertyOverride.config",
                "PropertyOverrideContainer");

            var defaultResult = container.Resolve<TestTypeInConfig>("MyTestTypeToOverride");
            PropertyOverrides overrides = new PropertyOverrides();
            overrides.Add("X", 9999);
            overrides.Add("Y", "Overridden");
            var overriddenResult = container.Resolve<TestTypeInConfig>("MyTestTypeToOverride", overrides);

            Assert.AreEqual<int>(101, defaultResult.Value);
            Assert.AreEqual<int>(-111, defaultResult.X);
            Assert.AreEqual<string>("DefaultFromConfigFile", defaultResult.Y);
            Assert.AreEqual<int>(101, overriddenResult.Value);
            Assert.AreEqual<int>(9999, overriddenResult.X);
            Assert.AreEqual<string>("Overridden", overriddenResult.Y);
        }
        public void PropertyOverrideWithCode()
        {
            TestTypeInConfig overrideObject = new TestTypeInConfig();

            IUnityContainer container = new UnityContainer();

            container.RegisterType <TestTypeInConfig>(new InjectionProperty("X", -111),
                                                      new InjectionProperty("Y", "default"), new InjectionConstructor());
            var defaultResult           = container.Resolve <TestTypeInConfig>();
            PropertyOverrides overrides = new PropertyOverrides();

            overrides.Add("X", 9999);
            overrides.Add("Y", "Overridden");
            var overriddenResult = container.Resolve <TestTypeInConfig>(overrides);

            Assert.AreEqual <int>(-111, defaultResult.X);
            Assert.AreEqual <string>("default", defaultResult.Y);
            Assert.AreEqual <int>(9999, overriddenResult.X);
            Assert.AreEqual <string>("Overridden", overriddenResult.Y);
        }
        public void PropertyOverrideWithDefaultInConfig()
        {
            TestTypeInConfig overrideObject = new TestTypeInConfig(666);

            IUnityContainer container = ConfigurationFixtureBase.GetContainer(@"ConfigFiles\PropertyOverride.config",
                                                                              "PropertyOverrideContainer");

            var defaultResult           = container.Resolve <TestTypeInConfig>("MyTestTypeToOverride");
            PropertyOverrides overrides = new PropertyOverrides();

            overrides.Add("X", 9999);
            overrides.Add("Y", "Overridden");
            var overriddenResult = container.Resolve <TestTypeInConfig>("MyTestTypeToOverride", overrides);

            Assert.AreEqual <int>(101, defaultResult.Value);
            Assert.AreEqual <int>(-111, defaultResult.X);
            Assert.AreEqual <string>("DefaultFromConfigFile", defaultResult.Y);
            Assert.AreEqual <int>(101, overriddenResult.Value);
            Assert.AreEqual <int>(9999, overriddenResult.X);
            Assert.AreEqual <string>("Overridden", overriddenResult.Y);
        }
        public void CanOverrideMultipleInjectionPropertiesWithOverrideCollection()
        {
            TypeToInjectForPropertyOverride1 defaultObject = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);
            int defaultValue = 111;
            int overrideValue = 222;
            PropertyOverrides overrides = new PropertyOverrides();
            overrides.Add("X", overrideValue);
            overrides.Add("InjectedObject", overrideObject);

            IUnityContainer container = new UnityContainer();

            container.RegisterType<SubjectType1ToInjectForPropertyOverride>(
                new InjectionProperty("InjectedObject", defaultObject), new InjectionProperty("X", defaultValue));
            var result1 =
                (SubjectType1ToInjectForPropertyOverride)
                    container.Resolve(typeof(SubjectType1ToInjectForPropertyOverride), overrides);
            var result2 = container.Resolve<SubjectType1ToInjectForPropertyOverride>();

            Assert.IsInstanceOfType(result1.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.AreEqual<int>(result1.X, overrideValue);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
            Assert.AreEqual<int>(result2.X, defaultValue);
        }
        public void PropertyOverrideWithCode()
        {
            TestTypeInConfig overrideObject = new TestTypeInConfig();

            IUnityContainer container = new UnityContainer();

            container.RegisterType<TestTypeInConfig>(new InjectionProperty("X", -111),
                new InjectionProperty("Y", "default"), new InjectionConstructor());
            var defaultResult = container.Resolve<TestTypeInConfig>();
            PropertyOverrides overrides = new PropertyOverrides();
            overrides.Add("X", 9999);
            overrides.Add("Y", "Overridden");
            var overriddenResult = container.Resolve<TestTypeInConfig>(overrides);

            Assert.AreEqual<int>(-111, defaultResult.X);
            Assert.AreEqual<string>("default", defaultResult.Y);
            Assert.AreEqual<int>(9999, overriddenResult.X);
            Assert.AreEqual<string>("Overridden", overriddenResult.Y);
        }