私は、サービスのための非常に単純なコマンドインターフェイスを念入りにして、http cmdsがそれを制御するために送信できるようにしています。URLルーティングを持つコマンドパターン
苦労している部分は、ルートに基づいたコマンドを実装するための最良の方法です。私はコマンドパターンに多くのものを見てきましたが、修正しようとしていることが1つあります。すべての場合に、コマンドを持つ辞書があります。辞書を取り除くための方法がありますか?たとえば、クラス内のすべての静的メソッドを見ますか?私はこれを反射で行うことができると確信していますが、私はまだ例を見ていません。そして、私がコマンドパターンと反射を探すとき、ほとんどの人はそれから離れていると言います。
私の主な目標は、誰かがコマンドを追加して辞書に追加するのを忘れないようにすることです。すべての静的メソッドがルートに応答するようにします。
これはいいアイデアですか、それともねじを締めて、普通のパターンに固執すべきですか?
私はこの Multi-threading with .Net HttpListener
に似た非常に基本的なWebサーバーとHttpListenerをを使用してイムを追加する必要がありますし、私はイムが何を探して何のためにコマンドパターンで見た中で最高の例では、これは using the command and factory design patterns for executing queued jobs
です完全なソリューション
//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サービス関連の技術を使用していません。これは、あなたがあまりにもurl rest(ish)コールを介してコマンドに送ることができるWindowsサービスになるでしょう – jrich523