private void SeedData(EntityTypeBuilder <User> builder) { builder.HasData( BuilderFactory <UserBuilder> .Create() .SetUserId(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E1")) .SetFirstName("John") .SetLastName("Madison") .SetEmail("johnmadison@mah") .SetPassword(BCrypt.Net.BCrypt.HashPassword("JohnMadison")) .Build(), BuilderFactory <UserBuilder> .Create() .SetUserId(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E2")) .SetFirstName("Adam") .SetLastName("Madison") .SetEmail("adammadison@mah") .SetPassword(BCrypt.Net.BCrypt.HashPassword("AdamMadison")) .Build(), BuilderFactory <UserBuilder> .Create() .SetUserId(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E3")) .SetFirstName("James") .SetLastName("Paterson") .SetEmail("jamespaterson@mah") .SetPassword(BCrypt.Net.BCrypt.HashPassword("JamesPaterson")) .Build(), BuilderFactory <UserBuilder> .Create() .SetUserId(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4")) .SetFirstName("Amy") .SetLastName("Jackson") .SetEmail("amyjackson@mah") .SetPassword(BCrypt.Net.BCrypt.HashPassword("AmyJackson")) .Build() ); }
/// <summary> /// Parse header from <paramref name="text"/> string /// and return position to next character after header. /// </summary> /// <param name="text">String that will be parsed</param> /// <param name="header">Result of parsing</param> /// <returns>Position to next character after header</returns> /// <exception cref="ParseException">Throw if document has invalid structure</exception> private int ParseHeader(string text, out SchemaHeader header) { header = null; var startPosition = NextElementStartPosition(text, 0); if (IsEOF(text, startPosition)) { throw new ParseException("Xml document should contain root level element", startPosition); } var match = _headerRx.Match(text); if (!match.Success) { return(0); } if (match.Index != 0 || match.Index != startPosition) { throw new ParseException("Header must be first thing in file", match.Index); } var builder = BuilderFactory.Create(); builder.SetValue(match.Value); header = builder.BuildHeader(); return(match.Length); }
/// <summary> /// Parse comment from <paramref name="startPosition"/> position in <paramref name="text"/> /// string and return position to next character after element. /// </summary> /// <param name="text">String that will be parsed</param> /// <param name="startPosition">Position from which parsing will start</param> /// <param name="comment">Result of parsing</param> /// <returns>Position to next character after element</returns> private int ParseComment(string text, int startPosition, out SchemaComment comment) { comment = null; var nextPosition = NextElementStartPosition(text, startPosition); if (IsEOF(text, nextPosition)) // no one comment left { return(startPosition); } var commentMatch = _commentRx.Match(text, nextPosition); if (!commentMatch.Success) { return(startPosition); } if (commentMatch.Index != nextPosition) // means that next item is not a comment { return(startPosition); } var builder = BuilderFactory.Create(); builder.SetValue(commentMatch.Value); comment = builder.BuildComment(); return(PositionAfterElement(commentMatch)); }
private void SeedData(EntityTypeBuilder <Friend> builder) { builder.HasData( BuilderFactory <FriendBuilder> .Create() .SetId(1) .SetFriend1Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E1")) .SetFriend2Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E2")) .Build(), BuilderFactory <FriendBuilder> .Create() .SetId(2) .SetFriend1Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E1")) .SetFriend2Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E3")) .Build(), BuilderFactory <FriendBuilder> .Create() .SetId(3) .SetFriend1Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E1")) .SetFriend2Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4")) .Build(), BuilderFactory <FriendBuilder> .Create() .SetId(4) .SetFriend1Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E2")) .SetFriend2Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4")) .Build(), BuilderFactory <FriendBuilder> .Create() .SetId(5) .SetFriend1Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E3")) .SetFriend2Id(new Guid("F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4")) .Build() ); }
public void Configure(EntityTypeBuilder <Contact> builder) { builder.ToTable("Contact"); builder.HasKey(t => t.Id); builder.Property(t => t.FirstName).IsRequired().HasMaxLength(50); builder.Property(t => t.LastName).IsRequired().HasMaxLength(50); builder.Property(t => t.PhoneNo).IsRequired().HasMaxLength(20); builder.Property(t => t.Email).HasMaxLength(255); builder.HasData( BuilderFactory <ContactBuilder, Contact> .Create() .Set() .SetId(new Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E1")) .SetFirstName("Michael") .SetLastName("Hendricks") .SetPhoneNo("0784344321") .SetEmail("michael@mah") .Build(), BuilderFactory <ContactBuilder, Contact> .Create() .Set() .SetId(new Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E2")) .SetFirstName("Jacob") .SetLastName("Collins") .SetPhoneNo("0784323421") .SetEmail("jacob@mah") .Build(), BuilderFactory <ContactBuilder, Contact> .Create() .Set() .SetId(new Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E3")) .SetFirstName("Adam") .SetLastName("Antons") .SetPhoneNo("0784346789") .SetEmail("adam@mah") .Build(), BuilderFactory <ContactBuilder, Contact> .Create() .Set() .SetId(new Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")) .SetFirstName("James") .SetLastName("Barns") .SetPhoneNo("0732343521") .SetEmail("james@mah") .Build(), BuilderFactory <ContactBuilder, Contact> .Create() .Set() .SetId(new Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E5")) .SetFirstName("Tammy") .SetLastName("Micthels") .SetPhoneNo("0784347654") .SetEmail("tammy@mah") .Build() ); }
static Configuration() { _lazy = new Lazy <IConfiguration>(() => { var dynamicConfigBuilder = BuilderFactory.Create <IConfiguration>() .Implement(q => q.AnotherDateTime, () => DateTime.UtcNow) .Implement <string>(q => () => ConfigurationManager.AppSettings[q.Name]) .Implement <int>(q => () => Convert.ToInt32(ConfigurationManager.AppSettings[q.Name])) .Implement <DateTime>(q => () => DateTime.Parse(ConfigurationManager.AppSettings[q.Name])); return(dynamicConfigBuilder.Build()); }); }
//建造者模式实现了具体构造过程(业务逻辑)和显示(最终数据)的解耦。 //建造者模式主要适用于 //1.建造的对象有统一的外部接口 //2.可以分模块初始化,且初始化顺序固定 //3.初始化工作比较复杂 //4.建造的对象比较单一(一个建造者只能创造出一类对象,不过可以组合不同的建造者组件进行扩展) //将不同的建造步骤封装到不同的建造类中,再由Director根据不同的情况决定调用对应的建造者类创造对象。 //扩展新的建造者对象时,仅需要添加对应的建造者类即可。 static void Main(string[] args) { Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType.Namespace); IDirector director = BuilderFactory.Create <IDirector>(); IBuilder intelBuilder = BuilderFactory.Create <IIntelBuilder>(); IBuilder amdBuilder = BuilderFactory.Create <IAMDBuilder>(); INoteBook nbIntel = director.BuildNoteBook(intelBuilder); INoteBook nbAMD = director.BuildNoteBook(amdBuilder); Console.WriteLine("--------------"); nbIntel.Display(); Console.WriteLine("--------------"); nbAMD.Display(); Console.ReadKey(); }
private void Generate(Vector3 spawnDirection, bool animate = true) { bool offStartingBlock = _tileFactorySettings.startingCounter >= _tileFactorySettings.startingTiles.Count; if (offStartingBlock) { ChunkElement element = GetNextElement(); _tileFactorySettings.randomTiles = element.tiles; _obstacleFactorySettings.builders = element.obstacleBuilders; } Tile previousTile = _tiles.Last.Value; Tile nextTile = _tileFactory.Create(); _tiles.AddLast(nextTile); Vector3 pTilePos = previousTile.transform.position; Vector3 pTileSize = previousTile.meshCollider.bounds.size; Quaternion nextRotation = previousTile.transform.rotation * Quaternion.Euler(spawnDirection); Vector3 nextOffset = nextRotation * nextTile.placementOffset; nextOffset = Vector3.Scale(pTileSize, nextOffset); nextTile.transform.position = pTilePos + nextOffset; nextTile.transform.rotation = nextRotation; if (offStartingBlock && _obstacleFactorySettings.builders.Count > 0) { IBuilder pattern = _spawnPatternFactory.Create(); pattern.SpawnForTile(nextTile); } if (animate) { nextTile.AnimateReveal(); } }
static void WriteOutputFile(string filename, Differences diff) { var builder = BuilderFactory.Create(filename); builder.Build(filename, diff); }
public async Task <User> GetByEmailAsync(string email) { try { var user = await _context.Users.Include(t => t.Friend1s).Include(t => t.Friend2s).FirstOrDefaultAsync(t => t.Email == email); foreach (var friend in user.Friend1s) { if (friend.Friend1?.Email != email) { friend.Friend1 = await GetByIdAsync(friend.Friend1Id); user.Friends.Add(BuilderFactory <FriendBuilder> .Create().Copy(friend) .SetId(friend.Id) .SetFirstName(friend.Friend1.FirstName) .SetLastName(friend.Friend1.LastName) .SetEmail(friend.Friend1.Email) .Build()); } else { friend.Friend2 = await GetByIdAsync(friend.Friend2Id); user.Friends.Add(BuilderFactory <FriendBuilder> .Create().Copy(friend) .SetId(friend.Id) .SetFirstName(friend.Friend2.FirstName) .SetLastName(friend.Friend2.LastName) .SetEmail(friend.Friend2.Email) .Build()); } } foreach (var friend in user.Friend2s) { if (friend.Friend1?.Email != email) { friend.Friend1 = await GetByIdAsync(friend.Friend1Id); user.Friends.Add(BuilderFactory <FriendBuilder> .Create().Copy(friend) .SetId(friend.Id) .SetFirstName(friend.Friend1.FirstName) .SetLastName(friend.Friend1.LastName) .SetEmail(friend.Friend1.Email) .Build()); } else { friend.Friend2 = await GetByIdAsync(friend.Friend2Id); user.Friends.Add(BuilderFactory <FriendBuilder> .Create().Copy(friend) .SetId(friend.Id) .SetFirstName(friend.Friend2.FirstName) .SetLastName(friend.Friend2.LastName) .SetEmail(friend.Friend2.Email) .Build()); } } user.NotFriends.AddRange(await _context.Users.Where(t => !user.Friends.Any(a => a.Email == t.Email)) .Select(t => BuilderFactory <FriendBuilder> .Create() .SetFirstName(t.FirstName) .SetLastName(t.LastName) .SetEmail(t.Email) .Build()).ToListAsync()); return(user); } catch (Exception e) { throw; } }
public test() { BuilderFactory <ContactBuilder, Contact> .Create(); }
/// <summary> /// Parse constant from <paramref name="startElementPosition"/> position in <paramref name="text"/> /// string and return element's constant. /// </summary> /// <param name="text">String that will be parsed</param> /// <param name="startElementPosition">Start position of element that has constant value</param> /// <param name="elementName">Constant parent's name</param> /// <param name="constant">Builded constant or null if constant doesn't exist</param> /// <returns>Position after element close tag</returns> /// <exception cref="ParseException">Throw if document has invalid structure</exception> private int ParseConstant(string text, int startElementPosition, string elementName, out SchemaConstant constant) { constant = null; var constantMatch = _constantRx.Match(text, startElementPosition); if (!constantMatch.Success) // constant doesn't exist { return(startElementPosition); } var constantTextGroup = constantMatch.Groups[2]; // check open tag var beforeOpenTagGroup = constantMatch.Groups[1]; var beforeOpenTagPosition = PositionAfterElement(beforeOpenTagGroup); if (beforeOpenTagPosition != startElementPosition) { return(startElementPosition); // means that found another element's comment } var openTagNameMatch = _elementNameRx.Match(text, beforeOpenTagPosition); if (!openTagNameMatch.Success) { throw new ParseException("Invalid or missing open tag", beforeOpenTagPosition); } var openTagName = openTagNameMatch.Groups[1].Value; if (openTagName != elementName) { throw new ParseException("Name of open tag doesn't match with name of parent element", beforeOpenTagPosition); } // check close tag var beforeCloseTagGroup = constantMatch.Groups[3]; var beforeCloseTagPosition = PositionAfterElement(beforeCloseTagGroup); var closeTagMatch = _elementCloseTagRx.Match(text, beforeCloseTagPosition); if (!closeTagMatch.Success) { throw new ParseException("Opened element should be closed", beforeCloseTagPosition); } var closeTagNameMatch = _elementNameRx.Match(text, beforeCloseTagPosition); if (!closeTagNameMatch.Success) { throw new ParseException("Invalid or missing close tag", beforeCloseTagPosition); } var closeTagName = closeTagNameMatch.Groups[1].Value; if (closeTagName != elementName) { throw new ParseException("Name of close tag doesn't match with name of parent element", beforeCloseTagPosition); } if (closeTagMatch.Index != beforeCloseTagPosition) { throw new ParseException("Element should be closed after constant", beforeCloseTagPosition); } var constantBuilder = BuilderFactory.Create(); constantBuilder.SetValue(constantTextGroup.Value); constant = constantBuilder.BuildConstant(); return(PositionAfterElement(closeTagMatch)); }
/// <summary> /// Parse element from <paramref name="startPosition"/> position in <paramref name="text"/> /// string and return position to next character after element. /// </summary> /// <param name="text">String that will be parsed</param> /// <param name="startPosition">Position from which parsing will start</param> /// <param name="element">Result of parsing</param> /// <returns>Position to next character after element</returns> /// <exception cref="ParseException">Throw if document has invalid structure</exception> private int ParseElement(string text, int startPosition, out SchemaElement element) { element = null; var nextPosition = NextElementStartPosition(text, startPosition); if (IsEOF(text, nextPosition)) // no one element left { return(startPosition); } var openTagMatch = _elementOpenTagRx.Match(text, startPosition); if (!openTagMatch.Success) // no element found { return(startPosition); } if (openTagMatch.Index != nextPosition) // means that next item is not an element { return(startPosition); } var elementStartPosition = openTagMatch.Index; var nameMatch = _elementNameRx.Match(text, elementStartPosition); if (!nameMatch.Success) { throw new ParseException("Impossible to detect xml element name", elementStartPosition); } var name = nameMatch.Groups[1].Value; var elementBuilder = BuilderFactory.Create(); elementBuilder.SetName(name); nextPosition = PositionAfterElement(openTagMatch); var attributes = ParseAttributes(text, elementStartPosition, nextPosition); if (!attributes.IsNullOrEmpty()) { elementBuilder.AddAttributes(attributes); } // element closes immediately var closeElementMatch = _elementCloseImmediatelyRx.Match(text, elementStartPosition); if (closeElementMatch.Success && closeElementMatch.Index < nextPosition) { element = elementBuilder.BuildElement(); return(nextPosition); } // element has constant SchemaConstant constant; var afterParseConstantPosition = ParseConstant(text, elementStartPosition, name, out constant); if (constant != null) { nextPosition = afterParseConstantPosition; elementBuilder.AddChild(constant); element = elementBuilder.BuildElement(); return(nextPosition); } // element has children List <SchemaElement> children; nextPosition = ParseElements(text, nextPosition, name, out children); elementBuilder.AddChildren(children); element = elementBuilder.BuildElement(); return(nextPosition); }