2017-01-06 73 views
0

我有以下代码寄存器映射(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):

获取统一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以在实体与模型之间进行映射。 我使用“WebActivatorEx.PreApplicationStartMethod”来引导依赖关系(统一)。 –