2017-01-06 2 views
0

У меня есть следующий код для регистрации Mapping (версия 4,2)Регистрация AutoMapper с Unity не удается

public class ModelMapperProfile : Profile 
{ 

    protected override void Configure() 
    { 
     CreateMap<Case, CaseModel>(); 
     CreateMap<CaseDetail, CaseDetailModel>(); 
    } 
} 
public static class AutoMapperService 
{ 
    public static MapperConfiguration Initialize() 
    { 
     MapperConfiguration config = new MapperConfiguration(cfg => 
     { 
      cfg.AddProfile<ModelMapperProfile>(); 
     }); 

     return config; 
    } 
} 

И я зарегистрировать зависимость, используя единство следующим образом ...

public static void RegisterTypes(IUnityContainer container) 
{ 

    container.LoadConfiguration(); 
    var mapper = AutoMapperService.Initialize() 
           .CreateMapper(); 
    container.RegisterInstance<IMapper>(mapper); 
} 

Моих здесь конструктора службы ..

public TaxLiabilityCaseService(IMapper mapper, 
     IUnitOfWork unitofWork, 
     IRepository<Case> caseR, 
     IRepository<CaseDetail> caseDetailR) 
    { 
     _mapper = mapper; 
     _unitofWork = unitofWork; 
     _caseR = caseR; 
     _caseDetailR = caseDetailR; 
    } 

И я получил следующее сообщение об ошибке ..

Текущий тип, AutoMapper.IMapper, является интерфейсом и не может быть сконструирован. Вам не хватает картографирования типов?

Answers found here did not work for me

Что я здесь отсутствую

ответ

1

попробуй выполнить следующие действия (MVC5):

Получить Unity NuGet пакет:

Unity.Mvc5 

Создать этот класс:

public class MapperConfig 
    { 
     public static IMapper Mapper { get; set; } 
     public static void RegisterProfiles() 
     { 
      var config = new MapperConfiguration(cfg => 
      { 
       // add profiles here 
      }); 
      config.AssertConfigurationIsValid(); 
      Mapper = config.CreateMapper(); 
     } 
    } 

В UnityConfig файла (созданного в пакете), добавьте это:

public static void RegisterComponents() 
    { 
      var container = new UnityContainer(); 
      container.RegisterInstance<IMapper>(MapperConfig.Mapper); 
    } 

В Global.asax, добавьте эти:

protected void Application_Start() 
     { 
      MapperConfig.RegisterProfiles(); 
      UnityConfig.RegisterComponents(); 
     } 

Вы должны быть хорошо после этого.

+0

Первый: он не работает так, как вам нужен фактический объект для регистрации, а null не разрешен. –

+0

@ user2984500 ... В каком проекте вы работаете? Что такое «картограф»? Вы на правильном пути, но нужно правильно структурировать его. –

+0

Это MVC 5 и пытается подключить AutoMapper для сопоставления между Entity to Model. Я использую «WebActivatorEx.PreApplicationStartMethod» для загрузки зависимостей (единство). –

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