/// <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); }
/// <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); }