2011-04-19 222 views
1

鉴于以下两个类别,我可以将ApplicationSettings映射到AppSettings吗?AutoMapper可以映射静态属性吗?

Mapper.CreateMap(Of ApplicationSettings, AppSettings)() 
Mapper.Map(Of ApplicationSettings, AppSettings)(ApplicationSetting.Load) 

Public Class ApplicationSettings 

    Public Property RecaptchaPrivateKey As String 
    Public Property RecaptchaPublicKey As String 

End Class 

Public Class AppSettings 

    Public Shared Property RecaptchaPrivateKey As String 
    Public Shared Property RecaptchaPublicKey As String 

End Class 
+2

为什么这里有两个班?静态方法对源类加载,然后对静态属性进行加载。第二类在第一类中提供的静态属性不是什么? – 2011-04-20 00:49:34

+0

@Jimmy - 源类没有静态属性。我使用XmlSerializer来序列化/反序列化一些应用程序级别的设置,我想在整个应用程序中使用它,并且我可以使用Application状态,但它不是强类型的,所以我认为这对于AutoMapper来说是完美的地方。无论如何,它似乎不会将ApplicationSettings类属性映射到AppSettings的静态属性。 – Sam 2011-04-20 04:49:08

+0

您应该可以将AppSettings更改为单例,然后将ApplicationSettings映射到AppSettings.Instance ..我将无法为您提供代码,因为我不太了解VB.NET语法:) – 2011-04-20 07:19:50

回答

1

萨姆问这在C#,这里有云:

public class AppSettings 
{ 
    public string RecaptchaPrivateKey { get; set; } 
    public string RecaptchaPublicKey { get; set; } 
} 

public class ApplicationSettings 
{ 
    private static ApplicationSettings _instance; 

    public static ApplicationSettings Instance 
    { 
     get { 
      if (_instance == null) { _instance = new ApplicationSettings();}     
      return _instance; 
     } 
    } 

    public string RecaptchaPrivateKey { get; set; } 
    public string RecaptchaPublicKey { get; set; } 

    private ApplicationSettings() 
    { 
    } 
} 

,并使用此:

Mapper.CreateMap<ApplicationSettings, AppSettings>(); 
var appSettings = Mapper.Map<ApplicationSettings, AppSettings>ApplicationSettings.Instance); 
+0

这并不回答提出的问题,它提出了对代码库进行更改以解决问题(创建单例)。它解决了这个人的特定问题,但它并没有回答关于AutoMapper是否可以处理静态属性的更一般的问题。 – 2015-02-09 16:26:55