コード例 #1
0
ファイル: ModelProperty.cs プロジェクト: st9200/soal-oslo
 protected ModelProperty(string name, Type type, Type declaringType)
 {
     this.Name = name;
     this.Type = type;
     this.DeclaringType = declaringType;
     this.opposite = null;
 }
コード例 #2
0
ファイル: ModelClass.cs プロジェクト: st9200/soal-oslo
 void INotifyModelClass.OnAddValue(ModelProperty property, object value, bool firstCall)
 {
     bool added = false;
     if (property.IsCollection)
     {
         IModelCollection collection = this.GetValue(property) as IModelCollection;
         if (collection != null)
         {
             if (value != null && collection.Add(value))
             {
                 added = true;
             }
             else if (value != null && firstCall)
             {
                 added = true;
             }
         }
     }
     else
     {
         object oldValue = this.GetValue(property);
         if (value != oldValue)
         {
             if (oldValue != null)
             {
                 (this as INotifyModelClass).OnRemoveValue(property, oldValue, false);
             }
             this.values[property] = value;
             added = value != null;
         }
         else
         {
             added = value != null && firstCall;
         }
     }
     if (added)
     {
         ModelProperty oppositeProperty = property.Opposite;
         if (oppositeProperty != null)
         {
             INotifyModelClass oppositeObject = value as INotifyModelClass;
             if (oppositeObject != null)
             {
                 oppositeObject.OnAddValue(oppositeProperty, this, false);
             }
         }
     }
 }
コード例 #3
0
ファイル: ModelClass.cs プロジェクト: st9200/soal-oslo
 public object GetValue(ModelProperty property)
 {
     object value;
     if (this.values.TryGetValue(property, out value))
     {
         return value;
     }
     else
     {
         Func<object> initializer;
         if (this.initializers.TryGetValue(property, out initializer))
         {
             value = initializer();
             this.values[property] = value;
             if (!property.IsCollection)
             {
                 (this as INotifyModelClass).OnAddValue(property, value, true);
             }
             return value;
         }
     }
     return null;
 }
コード例 #4
0
ファイル: ModelClass.cs プロジェクト: st9200/soal-oslo
 public static void LazyInit(ModelClass obj, ModelProperty property, Func<object> value)
 {
     obj.initializers.Add(property, value);
 }
コード例 #5
0
ファイル: ModelClass.cs プロジェクト: st9200/soal-oslo
 public void SetValue(ModelProperty property, object newValue)
 {
     object oldValue;
     if (this.values.TryGetValue(property, out oldValue))
     {
         if (newValue == oldValue) return;
     }
     if (property.IsCollection)
     {
         this.values[property] = newValue;
     }
     else
     {
         (this as INotifyModelClass).OnAddValue(property, newValue, true);
     }
 }
コード例 #6
0
ファイル: ModelClass.cs プロジェクト: st9200/soal-oslo
 public void LazyInit(ModelProperty property, Func<object> value)
 {
     this.initializers.Add(property, value);
 }
コード例 #7
0
ファイル: ModelCollection.cs プロジェクト: st9200/soal-oslo
 public ModelCollectionBase(IModelClass owner, ModelProperty ownerProperty)
 {
     this.Owner = owner;
     this.OwnerProperty = ownerProperty;
 }
コード例 #8
0
ファイル: ModelProperty.cs プロジェクト: st9200/soal-oslo
 protected static ModelProperty RegisterProperty(Type declaringType, string name, ModelProperty property)
 {
     Dictionary<string, ModelProperty> propertyList;
     if (!ModelProperty.properties.TryGetValue(declaringType, out propertyList))
     {
         propertyList = new Dictionary<string, ModelProperty>();
         ModelProperty.properties.Add(declaringType, propertyList);
     }
     propertyList.Add(name, property);
     return property;
 }