/// <summary> /// Private Constructor /// </summary> /// <param name="sourceDeclaringType"></params /// <param name="resultType"></param> /// <param name="expression"></param> /// <param name="retrievalMode"></param> private FunctionMapping(Type sourceDeclaringType, Type resultType, LambdaExpression expression, RetrievalMode retrievalMode) { SourceDeclaringType = sourceDeclaringType; SourceResultType = resultType; MappedExpression = expression; RetrievalMode = retrievalMode; }
/// <summary> /// Constructs the Retriever by specifying how to get the commands. /// </summary> /// <param name="mode">The retrieval mode: one of "f", "c", "dbg"</param> public CommandsRetriever(string mode) { this._mode = (mode == "dbg" ? RetrievalMode.Debug : mode == "f" ? RetrievalMode.File : mode == "c" ? RetrievalMode.Console : (RetrievalMode?)null) ?? throw new ArgumentOutOfRangeException($"Mode {mode} is not supported"); }
public void Retrieve(string filename, RetrievalMode flag) { if (flag == RetrievalMode.ALWAYS_ONLINE) { this.filename = filename; } if (flag == RetrievalMode.ALWAYS_OFFLINE) { result = ReadFile(filename); } if (flag == RetrievalMode.AUTO) { Retrieve(filename, RetrievalMode.ALWAYS_OFFLINE); if (result == null) { Retrieve(filename, RetrievalMode.ALWAYS_ONLINE); } } }
/// <summary> /// Link the current target member to the specified source member. /// </summary> /// <param name="sourceMember">Source member.</param> /// <param name="inclusionManaged">Indicates if this member is managed by inclusion specification.</param> /// <returns></returns> public IMapperAPIMember LinkTo(string sourceMember, RetrievalMode retrievalMode) { if (_MapperAPI._MapInfo.Members.ContainsKey(_TargetMember)) { throw new Exception(String.Format("The target member {0} of type {1} is already mapped.", _TargetMember.Name, _TargetMember.DeclaringType.FullName)); } var members = _MapperAPI._SourceType.GetMember(sourceMember, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (members.Length == 0) { throw new Exception(String.Format("No member with name {0} can be found in type {1}.", sourceMember, _MapperAPI._SourceType.FullName)); } if (members.Length > 1) { throw new Exception(String.Format("More than one member with name {0} can be found in type {1}.", sourceMember, _MapperAPI._SourceType.FullName)); } _MapperAPI._MapInfo.Members.Add(_TargetMember, new MemberMapping(members[0], retrievalMode)); return(this); }
/// <summary> /// Link the current target member to the specified source member. /// </summary> /// <typeparam name="TSourceProperty">Type of the source property.</typeparam> /// <param name="sourceMember">Expression representing the source property.</param> /// <param name="retrievalMode">Indicates the retrieval mode.</param> /// <returns></returns> public IMapperAPIMember <TSource, TTarget> LinkTo <TSourceProperty>(Expression <Func <TSource, TSourceProperty> > sourceMember, RetrievalMode retrievalMode) { if (_MapperAPI._MapInfo.Members.ContainsKey(_TargetMember)) { throw new Exception(String.Format("The target member {0} of type {1} is already mapped.", _TargetMember.Name, typeof(TTarget).FullName)); } MemberExpression memberExpr = sourceMember.Body as MemberExpression; if (memberExpr == null || !(memberExpr.Expression is ParameterExpression)) { _MapperAPI._MapInfo.Members.Add(_TargetMember, FunctionMapping.Create(sourceMember, retrievalMode)); } else { _MapperAPI._MapInfo.Members.Add(_TargetMember, new MemberMapping(memberExpr.Member, retrievalMode)); } return(this); }
/// <summary> /// Constructor. /// </summary> /// <param name="member"></param> internal MemberMapping(MemberInfo member, RetrievalMode retrievalMode) { Member = member; RetrievalMode = retrievalMode; }
/// <summary> /// Builds a FunctionMapping given a Func parameter. /// </summary> /// <param name="function"></param> static internal FunctionMapping Create <TSource, TResult>(Expression <Func <TSource, TResult> > function, RetrievalMode retrievalMode) { return(new FunctionMapping(typeof(TSource), typeof(TResult), function, retrievalMode)); }