public static T Create <T>() { object impl; var obj = Bakery.Bake(typeof(T), typeof(ObservedEntity), out impl); ((IObserved)obj).InnerImpl = impl; return((T)obj); }
public object OnGetProperty(Type type, string key) { if (key == nameof(IObserved.HasChanges)) { return(HasChanges); } if (key == nameof(IObserved.InnerImpl)) { return(InnerImpl); } if (type.IsInterface == false) { return(storage[key]); } else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(ICollection <>)) { object observed; var obj = Bakery.Bake( type, typeof(ObservedCollection <>).MakeGenericType(type.GetGenericArguments()[0]), out observed); //((IObserved)obj).InnerImpl = observed; ((TrackingGraph)observed).AddReference(this); return(obj); } else { object observed; var obj = Bakery.Bake(type, typeof(ObservedEntity), out observed); ((IObserved)obj).InnerImpl = observed; ((TrackingGraph)observed).AddReference(this); return(obj); } }