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