首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC 5插件

ASP.NET MVC 5插件
EN

Stack Overflow用户
提问于 2017-07-04 16:30:42
回答 1查看 128关注 0票数 1

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

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

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

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

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

代码语言:javascript
复制
 //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

例如,我需要一个插件,可以发送短信-

代码语言:javascript
复制
void SendMessage()
{
     //Send via abc
}

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

代码语言:javascript
复制
void SendMessage()
{
     //Send via xyz
}

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

我可以从你那里得到一个想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 18:11:18

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

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

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

代码语言:javascript
复制
ABCMessageSender : IMessageSender
{
   void SendMessage(MessageObject messageObject)
   {
      //Send via abc
   }
}

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

现在,您将创建一个工厂接口和一个工厂类

代码语言:javascript
复制
public interface IMessageSenderFactory 
{
    IMessageSender getMessageSender(MessageObject messageObject);
}

然后为该接口提供一个实现

代码语言:javascript
复制
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注入到控制器(或任何其他使用类)中并从那里使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44900852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档