通过从 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。
我想通过获取从 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。