2016-03-22 13 views
1

Sorunun doğru olup olmadığını bilmiyorum, ancak yapmam gereken şey, ilgili veriyi içeren messagetoprocess deposu yönteminden doğru varlığı almak, bunu bu senaryoda nasıl yapabilirim? (kod aşağıda)Geri Dönülecek <Type> Listesini bilmeden jenerik verileri almak mümkün mü?

AutoMapper'ı kullanıyorum.

Bir MessageEntity oluşturabildiğimi ve Arabirimi elimine edip tüm özellikleri bir araya getirebileceğimi biliyorum, ancak tam olarak yapmayacağım bir şey var.

Arabirim:

public interface IMessage 
{ 
    string MessageFrom { get; set; } 
    string MessageTo { get; set; } 
{ 

Uygulayıcı Varlıkları

public class EmailMessageEntity : IMessage 
{ 
    public bool IsMessageBodyHtml { get; set; } 
} 

public class SmsMessageEntity : IMessage 
{ 
    public bool IsMmsMessage { get; set; } 
} 

Modeller:

İşte

bende ne olduğunu
public class EmailMessage 
{ 
    public string MessageFrom { get; set; } 
    public string MessageTo { get; set; }  
    public bool IsMessageBodyHtml { get; set; } 
} 
public class SMSMessage 
{ 
    public string MessageFrom { get; set; } 
    public string MessageTo { get; set; } 
    public bool IsMmsMessage { get; set; } 
} 

Repositry:

public static List<*****Entity problem*****> RetrieveMessageToProcess() 
{ 
    var commandSettings = new CommandSettings 
    { 
     CommandText = @"[Schema].[RetrieveMessageToProcess]", 
     CommandType = CommandType.StoredProcedure 
    }; 

    return new MsSqlProviderBase(DbConnectionString, commandSettings).ExecuteQuery<*****Entity problem*****>(); 
    } 

onu kullanma:

//code excerpt 

var messagesToProcess = Db.RetrieveMessageToProcess(); //repository 

if (messagesToProcess == null) return; 

// Process Message(s) 
foreach (var messageEntity in messagesToProcess) 
{ 
    if (Email) // this is just the verification example not the actual statement and not a variable 
    { 
     Mapper.CreateMap<EmailMessageEntity, EmailMessage>(); 
     var emailMessage = Mapper.Map<EmailMessage>(messageEntity); 
    } 
    else if (SMS) 
    { 
     Mapper.CreateMap<SMSMessageEntity, SMSMessage>(); 
     var smsMessage = Mapper.Map<SmsMessage>(messageEntity); 
    } 
} 

cevap

1

Eğer IMessage arayüzünün yerine iki IsXXX özelliklerine bir MessageType elemana sahip düşünün misiniz?

Bir numarayı veya uygun bulduğunuz her hangi bir değeri döndürebilir ve bunu if(EMAIL) ifadenizde kullanabilirsiniz.

+0

Cevabınız için teşekkür ederiz. Bu sadece uygulamaya çalıştığım kodun bir parçası. Belirli mesaj varlıkları (sms, e-posta, ses, vb.) Ile ilgili daha spesifik özellikler var, sadece bunu ne demek istediğimi anlamanıza yardımcı olmak için kullandım. – Ray

İlgili konular