所以我一直在寻找impliment一个非常简单的服务命令接口,以便http cmds可以发送到它来控制它。命令模式与URL路由
im正在努力的部分是实现命令的最佳方式,这将基于路线。我已经在命令模式上看到了很多有意义的东西,但是有一件事是我试图修改的。在所有情况下,都有一个包含命令的字典,是否有一些方法可以摆脱字典,例如,查看一个类中的所有静态方法?我确定这可以通过反射来完成,但我还没有看到它的一个例子,并且当我查找大多数人说远离它的命令模式和反射时。
我的主要目标是确保如果有人添加一个命令,他们不会忘记将它添加到字典中,我知道我想要所有静态方法来响应路由。
这是一个好主意,还是我应该说拧它,只是坚持正常模式?
我应该用HttpListener与此类似 Multi-threading with .Net HttpListener
一个非常基本的Web服务器和最好的例子我见过的命令模式的什么即时希望做的是这个 using the command and factory design patterns for executing queued jobs
添加IM完整的解决方案
//simple interface
interface ICommand
{
bool Execute();
}
//example cmd
public class cmd_Restart:ICommand
{
public bool Execute()
{
//put your code here
//return true or false for success
logger.writeLog("It was called!");
return true;
}
}
class commands
{
private static Dictionary<string, Type> _commands;
public commands()
{
loadCommands();
}
public ICommand GetCommand(string cmdName)
{
//should probably be more complex to make sure its found
return (ICommand)Activator.CreateInstance(_commands[cmdName]);
}
private void loadCommands()
{
_commands = new Dictionary<string, Type>();
var cmdType = typeof(ICommand);
_commands = AppDomain.CurrentDomain.GetAssemblies()
.First(a => a.GetName().Name == "DomoticzServiceManagerTest")
.GetTypes()
.Where(t => t.Name.StartsWith("cmd_"))
.ToDictionary(c => c.Name.Substring(4).ToLower(),
c => c);
}
}
你应该从Asp.net 101开始。我很肯定它会覆盖那部分。 – Steve
@steve很好,我没有使用ASP.NET或任何Web服务相关的技术。这将是一个Windows服务,你可以发送到命令也通过网址休息(ish)调用 – jrich523