コード例 #1
0
 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()
         );
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
 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()
         );
 }
コード例 #5
0
        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()
                );
        }
コード例 #6
0
        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());
            });
        }
コード例 #7
0
        //建造者模式实现了具体构造过程(业务逻辑)和显示(最终数据)的解耦。
        //建造者模式主要适用于
        //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();
        }
コード例 #8
0
    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();
        }
    }
コード例 #9
0
        static void WriteOutputFile(string filename, Differences diff)
        {
            var builder = BuilderFactory.Create(filename);

            builder.Build(filename, diff);
        }
コード例 #10
0
        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;
            }
        }
コード例 #11
0
ファイル: Contact.cs プロジェクト: MickeyMuis007/RealDigital
 public test()
 {
     BuilderFactory <ContactBuilder, Contact> .Create();
 }
コード例 #12
0
        /// <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));
        }
コード例 #13
0
        /// <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);
        }