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)并从那里使用它。
对不起,这不是什么问题,而是向你求助。
我对可插入应用程序完全陌生。我以前都没想过。
目前我正在使用一个 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)并从那里使用它。