2014-01-15 121 views
0

类型基本上我有实体:AutoMapper和继承:解决由子字符串属性

public abstract class SocialNetworkAccount 
    { 
     public virtual string AccessToken { get; set; } 
     public virtual string ProviderUserId { get; set; } 
     public virtual string UserName { get; set; } 
    } 

和子类:

public class FacebookAccount : SocialNetworkAccount 
    { 
     public virtual string Name { get; set; } 
     public virtual string Link { get; set; } 
     public virtual GenderEnum Gender { get; set; } 
    } 
public class LinkedInAccount : SocialNetworkAccount 
{ 
    public virtual string LastName { get; set; } 
    public virtual string FirstName { get; set; } 
} 

,我需要映射DotNetOpenAuth.AspNet.AuthenticationResult我的实体。

AuthenticationResult具有字符串属性Provider

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication("..."); 
SocialNetworkAccount account = AutoMapper.Mapper.Map<SocialNetworkAccount>(result); 

,但我需要的实例是FacebookAccountLinkedInAccount依赖result.Provider。 任何帮助

+0

究竟'Provider'字符串包含?类型名称? –

+0

包含像“脸谱”一样的字符串 – Roar

回答

1

您应该手动处理提供者值。我建议你从AuthenticationResult创建映射到你需要的每个社交网络账户类型。然后,只需调用扩展方法相应的映射:

public static SocialNetworkAccount ToSocialNetworkAccount(
    this AuthenticationResult result) 
{ 
    switch(result.Provider) 
    { 
     case "facebook": return Mapper.Map<FacebookAccount>(result); 
     case "linkedin": return Mapper.Map<LinkedInAccount>(result); 
     // ... 
     default: 
      throw new ArgumentException("Unknown provider: " + result.Provider); 
    } 
} 

用法:

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication("..."); 
SocialNetworkAccount account = result.ToSocialNetworkAccount();