예제 #1
0
        public void Modify <TValue>(Expression <Func <RavenConfiguration, TValue> > key, TValue value, string customStringValue = null)
        {
            var expression = key.Body as MemberExpression;

            var members = new Stack <MemberInfo>();

            while (expression != null)
            {
                members.Push(expression.Member);

                expression = expression.Expression as MemberExpression;
            }

            object entity = configuration;

            foreach (var member in members)
            {
                var entityObject = member.GetValue(entity);

                if (entityObject is ConfigurationCategory)
                {
                    entity = entityObject;
                }
                else
                {
                    member.SetValue(entity, value);
                }
            }

            using (configuration.AllowChangeAfterInit())
            {
                configuration.SetSetting(RavenConfiguration.GetKey(key), customStringValue ?? value.ToString());
            }
        }