所以我一直在尋找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