Asp.net mvc ASP.NETMVC5插件

Asp.net mvc ASP.NETMVC5插件,asp.net-mvc,plugins,.net-4.5,mef,Asp.net Mvc,Plugins,.net 4.5,Mef,恕我直言,这不是什么问题,而是向你寻求帮助 我对可插拔应用程序完全陌生。我以前都没想过 目前我在一个SMS应用程序中工作,它可能有不同的网关来发送SMS 在网关中,根据一些标准动态选择合适的网关 不同的网关需要不同的url和数据来发送SMS。i、 e- //This is for one gateway xyz.com/SendTextMessage?Username=XX&Password=XX&From=XX&To=XX&Message=## //Th

恕我直言,这不是什么问题,而是向你寻求帮助

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

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

在网关中,根据一些标准动态选择合适的网关

不同的网关需要不同的url和数据来发送SMS。i、 e-

 //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
}
我不知道如何在不修改主应用程序源代码的情况下为网关准备插件


您能告诉我一些想法吗?

请参考一些关于工厂模式的文档。这里有一个-

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

现在,您可以拥有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注入控制器(或任何其他消费类)并从那里使用它

@kayes,好的,我在这里添加更多细节。您如何确定您希望使用哪个提供商发送的差异?不同的控制器、不同的方法或某种类型的参数?@kayes、SMS速率、掩蔽等。我认为,您所需要的只是工厂模式的实现。有一个IMessageSender接口,该接口有一个方法SendMessage(),该方法接受MessageObject参数。MessageObject应该具有发送消息的所有相关详细信息。现在,您可以拥有IMessageSender接口的不同实现,每个实现都使用自己的gatway和其他细节。最后,您可以使用FactoryPattern获取适当的IMessageSender实例并在其上调用SendMessage()。@Arungerge,您似乎走对了方向。你能补充一些细节吗?很抱歉提出这个要求。我真的搞不懂。