通过继承 Core 1 中的自定义接口,在自动映射器中自动执行映射类型 Asp.net



我想通过获取从 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().获取导出类型()在 .NET Core 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 类。

最新更新