예제 #1
0
        /// <summary>
        /// Register new member type (fluent method)
        /// </summary>
        /// <param name="memberTypes">new member types</param>
        /// <returns>MemberTypeMappingConfig instance to continue configuration through fluent syntax</returns>
        public MemberTypeMappingConfig RegisterMemberTypes(params Type[] memberTypes)
        {
            var intersection = _memberMappings.SelectMany(x => x.AllSupportedMemberTypes).Intersect(memberTypes);

            if (intersection.Any())
            {
                throw new ArgumentException("Types already registered " + string.Join(", ", intersection.Select(x => x.Name)));
            }
            var notMemberTypes = memberTypes.Where(x => !x.IsDerivativeOf(typeof(Member)));

            if (notMemberTypes.Any())
            {
                throw new ArgumentException(string.Join(", ", notMemberTypes.Select(x => x.Name)), " should be inherited from Member type");
            }
            var retVal = new MemberTypeMappingConfig(memberTypes);

            _memberMappings.Add(retVal);
            return(retVal);
        }
예제 #2
0
        /// <summary>
        /// Override already registered member type to new
        /// </summary>
        /// <typeparam name="T">overridden  member type</typeparam>
        /// <returns>MemberTypeMappingConfig instance to continue configuration through fluent syntax</returns>
        public MemberTypeMappingConfig OverrideMemberType <T>() where T : Member
        {
            var memberType   = typeof(T);
            var existMapping = _memberMappings.FirstOrDefault(x => x.MemberTypes.Contains(memberType));

            if (existMapping == null)
            {
                throw new ArgumentException("Not found");
            }
            existMapping.MemberTypes.Remove(memberType);

            var newMemberMapping = new MemberTypeMappingConfig()
            {
                MemberService       = existMapping.MemberService,
                MemberSearchService = existMapping.MemberSearchService
            };

            _memberMappings.Add(newMemberMapping);
            return(newMemberMapping);
        }