그래서 서비스를위한 아주 간단한 명령 인터페이스를 구현하여 httpcmds가 제어 할 수 있도록 보냈습니다.URL 라우팅을 사용하는 명령 패턴
고생하는 부분은 경로를 기반으로하는 명령을 구현하는 가장 좋은 방법입니다. 나는 명령 패턴에 대해 많은 것을 보았지만, 수정하려고하는 것이있다. 모든 경우에 명령어가있는 사전이 있습니다. 사전을 없애고, 예를 들어 클래스의 모든 정적 메소드를 보는 방법이 있습니까? Im 이것이 반성과 함께 할 수있다라고 확신하지만 나는 그것의 예를 아직 보지 않고있다. 그리고 언제나 나는 명령 패턴과 반사를 찾는다. 대부분의 사람들은 그것을 멀리하고 있다고 말한다.
내 주요 목표는 누군가가 사전에 추가하는 것을 잊지 않는 명령을 추가하면 모든 정적 메소드가 경로에 응답하기를 원한다는 것을 확인하는 것입니다.
이것은 좋은 생각입니까, 아니면 정상적인 패턴을 고수해야합니까?
나는에 대한 명령 패턴 보았다이 Multi-threading with .Net HttpListener
과 같은 아주 기본적인 웹 서버와 좋은 예와 http-listener에 무엇 메신저 수행하고자하는 것은이 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 또는 웹 서비스 관련 기술을 사용하지 않습니다. 이것은 당신이 명령을 너무 url rest (ish) 호출을 통해 보낼 수있는 Windows 서비스가 될 것입니다 – jrich523