ASP.NET MVC 5 插件

ASP.NET MVC 5 Plugin

对不起,这不是什么问题,而是向你求助。

我对可插入应用程序完全陌生。我以前都没想过。

目前我正在使用一个 SMS 应用程序,它可能有不同的网关来发送 SMS。

在网关中,根据某些标准动态选择正确的网关。

不同的网关需要不同的url和数据来发送短信。即 -

 //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
}

可能还有另一个可以发送短信的插件-

void SendMessage()
{
     //Send via xyz
}

我不知道如何在不修改主应用程序源代码的情况下为网关准备插件。

你有什么想法吗?

请参考一些关于工厂模式的文档。这是一个 - https://www.tutorialspoint.com/design_pattern/factory_pattern.htm

有一个 IMessageSender 接口,它有一个方法 SendMessage(),它接受一个 MessageObject 参数。 MessageObject 应具有发送消息的所有相关详细信息。 (从、到、正文等)

现在,您可以有不同的 IMessageSender 接口实现,每个实现都使用自己的网关和其他细节。

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

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

现在,你创建一个工厂接口和一个工厂class

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 注入您的控制器(或任何其他消耗 class)并从那里使用它。