2017-07-04 152 views
1

對我來說,這沒有任何問題,而是向你尋求幫助。ASP.NET MVC 5插件

我對可插拔應用程序是全新的。我甚至沒有想過。

目前我正在一個短信應用程序,它可能有不同的網關發送短信。

在網關中,根據一些標準動態選擇右側網關。

不同的網關需要不同的網址和數據來發送短信。即 -

//This is for one gateway 
xyz.com/SendTextMessage?Username=XX&Password=XX&From=XX&To=XX&Message=## 

//This is for one gateway 
abc.com?IN_MSG_ID=XX&MOBILENO=XX&BODY=XX&ORIGIN_PORT=XX 

例如,我需要一個插件,它能夠發送短信 -

void SendMessage() 
{ 
    //Send via abc 
} 

有可能是另一種插件,它可以發送SMS的

void SendMessage() 
{ 
    //Send via xyz 
} 

我可以」弄清楚如何在不修改主應用程序的源代碼的情況下爲網關準備插件。

我可以告訴你一個想法嗎?

+0

@ kayess,好吧,我在這裏添加更多細節。 –

+0

您如何確定您希望用於發送的提供商的差異?不同的控制器或不同的方法或某些類型參數? – kayess

+0

@ kayess,短信速率,掩蔽等 –

回答

1

請參考一些關於工廠模式的文檔。這裏是一個 - https://www.tutorialspoint.com/design_pattern/factory_pattern.htm

有一個IMessageSender接口,它有一個方法SendMessage(),它接受一個MessageObject參數。 MessageObject應該有發送消息的所有相關細節。 (From,To,Body等)

現在,您可以有不同的IMessageSender接口實現,每個接口都使用自己的gatway和其他細節。現在

ABCMessageSender : IMessageSender 
{ 
    void SendMessage(MessageObject messageObject) 
    { 
     //Send via abc 
    } 
} 

XYZMessageSender : IMessageSender 
{ 
    void SendMessage(MessageObject messageObject) 
    { 
     //Send via xyz 
    } 
} 

,爲您營造一個工廠接口和工廠類

public interface IMessageSenderFactory 
{ 
    IMessageSender getMessageSender(MessageObject messageObject); 
} 

,然後有該接口

public class MessageSenderFactory : IMessageSenderFactory { 

    //use getMessageSender method to get object of type MessageSender 
    public IMessageSender getMessageSender(MessageObject messageObject){ 

    if(messageObject == null){ 
    return null; 
    }  
    if(messageObject.From.equalsIgnoreCase("Some condition")){ 
    return new ABCMessageSender(); 

    } else if(messageObject.Rate.equalsIgnoreCase("Some other condition")){ 
    return new XYZMessageSender(); 

    } //else if(some other condition){ 
    //return some other message sender 
    //} 

    return null; 
} 
} 

最終實現,使用上面的工廠方法獲取適當的IMessageSender實例並在其上調用SendMessage()。如果您使用任何依賴注入模式,則可以將IMessageSenderFactory注入控制器(或任何其他消費類)並從此處使用它。