通过从 Asp.net 核心 1 中的自定义接口继承,在 Auto Mapper 中自动化映射类型

automate mapping types in Auto Mapper by inheriting from a custom interface in Asp.net Core 1

我想通过获取从 IMapFrom 接口继承的实例来自动化映射过程,如流动:

        var types = Assembly.GetExecutingAssembly().GetExportedTypes();
        var maps = (
                from type in types
                from instance in type.GetInterfaces()
                where
                    instance.IsGenericType &&
                    instance.GetGenericTypeDefinition() == typeof(IMapFrom<>) &&
                    !type.IsAbstract &&
                    !type.IsInterface
                select new
                {
                    Source = instance.GetGenericArguments()[0],
                    Destination = type
                }
            ).ToArray();

        foreach (var map in maps)
        {
            Mapper.CreateMap(map.Source, map.Destination);
        }

但是没有 Assembly.GetExecutingAssembly().GetExportedTypes() 在 .net 核心 1 中。 那么解决方案是什么?

PS:我使用结构图作为 DI 容器,我尝试这样使用它:

        Scan(scan =>
        {
            scan.AssembliesAndExecutablesFromApplicationBaseDirectory(
                assembly => assembly.FullName.StartsWith("MyAssemblyName")
                );
            scan.AddAllTypesOf(typeof(IMapFrom<>));
            scan.AddAllTypesOf<IHaveCustomMappings>();
        });

但是我找不到注入 IMapFrom<> 接口的 IEnamarable 的方法。

.net Core 中没有 GetExecutingAssembly() 是正确的。

您现在要做的是引用特定类型并获取该类型的程序集。例如:

typeof(Startup).GetTypeInfo().Assembly.GetExportedTypes();

在您的情况下,您需要引用与映射对象位于同一程序集中的类型,而不是使用 Startup class。