static void Main(string[] args) { try { var info = MappingInfo.Create <Foo, Foo>(); var info2 = MappingInfo.Create <MyClassB, MyClassB>(); //var info2 = MappingInfo.Create<InnerFoo, InnerFooDest>(); //info.BeforeMap = x => Console.WriteLine(x.MyProperty); //info.AfterMap = x => Console.WriteLine(x.MyProperty3); // info.AddMap(x => x.MyProperty, x => x.MyPropertyNano, x => x); //info.AddMap(x => x.MyProperty, x => x.MyProperty3, x => x); //info.AddUse(x => x.DT, _ => DateTime.Now); // info.WithConvertAction(x => x.MyProperty, x => x.MyProperty, x => new MyClassC()); info.BuildMapper(); info2.BuildMapper(); // info2.BuildMapper(); // DynamicObjectResolver.Default.GetMapper<MyClassA, MyClassB>(); } catch (Exception ex) { Console.WriteLine(ex); } finally { #if DEBUG var a = DynamicObjectTypeBuilder.Save(); Verify(a); #endif } }
public static object BuildMapperFromType <TFrom, TTo>(Func <string, string> nameMutator) { var mappingInfo = MappingInfo.Create <TFrom, TTo>(nameMutator); return(DynamicObjectTypeBuilder.BuildMapperToAssembly <TFrom, TTo>(mappingInfo)); //return DynamicObjectTypeBuilder.BuildMapperToDynamicMethod<TFrom, TTo>(mappingInfo); }
private static IEnumerable <MappingInfo> AnalyzeLoadMethod(SemanticModel semanticModel, ISymbol loadMethod) { var syntaxNode = loadMethod.DeclaringSyntaxReferences.Single().GetSyntax(); var methodSymbols = syntaxNode.DescendantNodes() .OfType <InvocationExpressionSyntax>() .Select(invocationExpressionSyntax => semanticModel.GetSymbolInfo(invocationExpressionSyntax.Expression).Symbol as IMethodSymbol) .Where(e => e != null && e.GetFullMetadataName() == ExternalLibraryInformation.Module.Register.FullName && e.Parameters.IsEmpty); foreach (var mapping in methodSymbols.Select(e => e.TypeArguments) .Where(typeArguments => typeArguments.Length == ExternalLibraryInformation.Module.RegisterMethodsGenericCount)) { if (!(mapping[0] is INamedTypeSymbol from)) { throw new AnalyzerException( $"Implementation is invalid: {mapping[0].ToDisplayString()}"); } if (!from.Constructors.Any()) { throw new AnalyzerException( $"Implementation has no constructor: {mapping[0].ToDisplayString()}"); } var constructionInfos = from.Constructors.Select(constructor => ConstructionInfo.Create( constructor.Parameters.Select( parameter => ParameterInfo.Create(parameter.Type.GetFullMetadataName())) .ToList())) .ToList(); var fromInfo = FromInfo.Create(from.GetFullMetadataName(), constructionInfos); var to = mapping[1]; var toInfo = ToInfo.Create(to.GetFullMetadataName()); yield return(MappingInfo.Create(fromInfo, toInfo)); } }