2017-01-19 1 views
0

Я не хочу, чтобы автоматизировать процесс отображения, получая экземпляры, которые наследуют интерфейс IMapFrom как протекающий:типов отображения автоматизировать в автоматическом Mapper по наследованию из пользовательского интерфейса в Asp.net Ядро 1

 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() in .net core 1. так в чем же решение?

PS: Я использую структуру карты как DI контейнер, и я пытался использовать его как это:

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

, но я не могу найти способ, чтобы впрыснуть IEnamarable из IMapFrom <> интерфейс.

ответ

1

Вы правы, что в .net Core нет GetExecutingAssembly().

Что вам теперь нужно сделать, это указать конкретный тип и получить сборку этого типа. Например:

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

В вашем случае вместо использования класса запуска вы хотите ссылаться на тип, который находится в той же сборке, что ваши объекты отображения.

Смежные вопросы