/// <summary> /// Gets the builder for the given Id /// </summary> /// <param name="id">The identifier.</param> /// <returns></returns> public IEntityBuilder Get(Id id) { BuilderInfo builder; if (id != Guid.Empty && !Ids.ContainsKey(id)) { Ids.Add(id, id); } if (Builders.TryGetValue(id, out builder)) { return(builder.Builder); } // Add the Entity to the mapper to make sure it can be created in the correct order EntityDependency.Mapper.Add(id); // Get the default Builder, or if no builder is defined, create a Generic Builder var constructor = (BuilderConstructorForEntity.ContainsKey(id) ? BuilderConstructorForEntity[id] : GetGenericConstructor(id)); builder = new BuilderInfo(id, (IEntityBuilder)constructor.Invoke(new object[] { id })); // Apply any Custom Actions ApplyCustomActions(id, builder); // Add the Builder to both Dictionaries (keyed by Id and Logical Name) BuildersByEntityType.AddOrAppend(id, builder); Builders.Add(id, builder); return(builder.Builder); }
private BuilderInfo CreateBuilder(Id id, ConstructorInfo constructor) { // Add the Entity to the mapper to make sure it can be created in the correct order EntityDependency.Mapper.Add(id); var builder = new BuilderInfo(id, (IEntityBuilder)constructor.Invoke(new object[] { id })); ApplyCustomActions(id, builder.Builder); Builders.Add(id, builder); BuildersByEntityType.AddOrAppend(id, builder); return(builder); }