Esempio n. 1
0
 private ConfigurationCompositeInfo GetInfoForCreation(Type configType, ConfigurationCompositeInfo suppliedInfo)
 {
     if (suppliedInfo == null)
     {
         if (!this._state.CompositeInfos.TryGetValue(configType, out suppliedInfo))
         {
             suppliedInfo = null;
         }
     }
     else
     {
         suppliedInfo = new ConfigurationCompositeInfo(suppliedInfo.Resource, suppliedInfo.Serializer);
         ConfigurationCompositeInfo existingInfo;
         if (this._state.CompositeInfos.TryGetValue(configType, out existingInfo))
         {
             if (suppliedInfo.Resource == null)
             {
                 suppliedInfo.Resource = existingInfo.Resource;
             }
             if (suppliedInfo.Serializer == null)
             {
                 suppliedInfo.Serializer = existingInfo.Serializer;
             }
         }
     }
     return(suppliedInfo);
 }
Esempio n. 2
0
        public virtual Boolean HasInformationAbout(Type configurationType, ConfigurationCompositeInfo info = null)
        {
            info = this.GetInfoForCreation(configurationType, info);
            String errorMsg;

            return(info != null && this.CheckInfo(configurationType, info, out errorMsg));
        }
Esempio n. 3
0
        private ConfigurationInstance <Object> DoCreate(Type configType, ConfigurationCompositeInfo info)
        {
            var configInstanceType = typeof(ConfigurationInstance <>).MakeGenericType(configType);
            var builder            = this._ssp.NewPlainCompositeBuilder(configInstanceType);

            String errorMsg;

            if (!this.CheckInfo(configType, info, out errorMsg))
            {
                throw new InvalidOperationException(errorMsg);
            }

            var serializer = this._ssp.NewPlainCompositeBuilder(info.Serializer).Instantiate <ConfigurationSerializer>();

            builder.Use(Tuple.Create(serializer, info.Resource));

            return((ConfigurationInstance <Object>)builder.InstantiateWithType(typeof(Object)));
        }
Esempio n. 4
0
        private Boolean CheckInfo(Type configType, ConfigurationCompositeInfo info, out String errorMsg)
        {
            var resource       = info.Resource;
            var serializerType = info.Serializer;

            if (serializerType == null)
            {
                errorMsg = "No (de)serializer found for configuration of type" + configType + " located in " + info.Resource + ".";
            }
            else if (!typeof(ConfigurationSerializer).IsAssignableFrom_IgnoreGenericArgumentsForGenericTypes(serializerType))
            {
                errorMsg = "The serializer type " + serializerType + " does not implement " + typeof(ConfigurationSerializer) + ".";
            }
            else
            {
                errorMsg = null;
            }

            return(errorMsg == null);
        }
Esempio n. 5
0
#pragma warning restore 649

        #region ConfigurationManager Members

        public virtual ConfigurationInstance <TConfiguration> Create <TConfiguration>(ConfigurationCompositeInfo info)
            where TConfiguration : class
        {
            var configType = typeof(TConfiguration);

            info = this.GetInfoForCreation(configType, info);
            if (info == null)
            {
                throw new InvalidOperationException("Could not find information about configuration with type " + configType + ".");
            }
            if (info == null)
            {
                if (!this._state.CompositeInfos.TryGetValue(configType, out info))
                {
                    throw new InvalidOperationException("Could not find information about configuration with type " + configType + ".");
                }
            }
            else
            {
                info = new ConfigurationCompositeInfo(info.Resource, info.Serializer);
                ConfigurationCompositeInfo existingInfo;
                if (this._state.CompositeInfos.TryGetValue(configType, out existingInfo))
                {
                    if (info.Resource == null)
                    {
                        info.Resource = existingInfo.Resource;
                    }
                    if (info.Serializer == null)
                    {
                        info.Serializer = existingInfo.Serializer;
                    }
                }
            }

            return((ConfigurationInstance <TConfiguration>) this.DoCreate(configType, info));
        }