2016-12-23 27 views
1

我有一个ASP.NET API版本2.0与VB.Net在后端,我想在Global.asax文件中初始化Automapper。在这里,我使用Auto Mapper 5.2版。我可以初始化使用C#代码,但我不太确定VB.Net。谷歌上搜索,我发现something这里以后就是我现在想:如何将Automapper注册到vb.net global.asax文件中?

Module AutoMapperConfiguration 
Public MapperConfiguration As IMapper 
    Public Sub Configure() 
    Dim config = New MapperConfiguration(//in this line I'm getting an error: 

重载决策失败,因为没有可访问的“新”可以用这些参数调用:“公共重载的Sub New(configurationExpression作为MapperConfigurationExpression)':因为'MapperConfigurationExpression'不是委托类型,所以Lambda表达式不能转换为'MapperConfigurationExpression'。

   Sub(cfg) 
      cfg.AddProfile(New EntityMapProfile()) 
     End Sub) 
    MapperConfiguration = config.CreateMapper() 
End Sub 

前端模块

然后我叫这个模块从的Application_Start()

AutoMapperConfiguration.Configure() 

但我最后一次这样做了使用C#与下面的代码行在Global.asax文件

Mapper.Initialize(x => 
    { 
     x.AddProfile<EntityMapProfile>(); 
    }); 

在APPLICAT ion_Start()很好地工作,但现在即使我转换上面的代码行然后我仍然面临问题。我希望你对上述的帮助或建议。

+0

难道你不只是发表这个问题? – DavidG

+0

是的,但遗憾的是我无法检索到这个帐户密码,而且那个帐户是新帐户,所以我要关闭该主题。我想没有人会注意到,我真的需要紧急帮助。谢谢 – barsan

+0

我认为它期望一个返回值。为你的lambda尝试使用'Function'而不是'Sub'。 – TyCobb

回答

1

无论出于何种原因,当为行动内联Sub时,VB.NET并未使用正确的构造函数。

Module AutoMapperConfiguration 
    Public MapperConfiguration As IMapper 

    Public Sub Configure() 
     Dim configAction As Action(Of IMapperConfigurationExpression) = Sub(cfg) cfg.AddProfile(Of EntityMapProfile)() 
     Dim config = New MapperConfiguration(configAction) 

     MapperConfiguration = config 
    End Sub 

End Module 

以上将迫使你的lambda来正确类型的Action(Of IMapperConfigurationExpression),从而迫使VB.NET使用正确的构造函数重载。

+0

非常感谢您的详细解释和不错的答案。它真的为我节省了很多时间。 – barsan

+1

没问题。很高兴我能帮上忙。这是一种痛苦和意外。 – TyCobb