Пример #1
0
        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
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
            }
        }