よりエレガントで、プロセッサをCommandProcessorDispatcher
クラスに注入する方法を見つけたいです。または、別のソリューションにすることもできます(目標は、各コマンド処理ロジックを独立したクラスに分離することです)。たぶん、ここでいくつかのデザインパターンが役立ちます。
public interface ICommand { }
public class StartCommand : ICommand { }
public class StopCommand : ICommand { }
public interface ICommandProcessor<in T> where T : ICommand
{
void Process(T command);
}
public class StartCommandProcessor : ICommandProcessor<StartCommand>
{
public void Process(StartCommand command) { }
}
public class StopCommandProcessor : ICommandProcessor<StopCommand>
{
public void Process(StopCommand command) { }
}
public interface ICommandProcessorDispatcher
{
void Process(ICommand command);
}
public class CommandProcessorDispatcher : ICommandProcessorDispatcher
{
public CommandProcessorDispatcher(Dictionary<Type, Action<ICommand>> processors)
{
_processors = processors;
}
private readonly Dictionary<Type, Action<ICommand>> _processors;
public void Process(ICommand command)
{
_processors[command.GetType()](command);
}
}
internal class Program
{
private static void Main(string[] args)
{
var dict = new Dictionary<Type, Action<ICommand>>
{
{ typeof(StartCommand), x => new StartCommandProcessor().Process((StartCommand)x) },
{ typeof(StopCommand), x => new StopCommandProcessor().Process((StopCommand)x) },
};
var dispatcher= new CommandProcessorDispatcher(dict);
}
}
あなたは見与えましたMediatRを?それは基本的にあなたが必要とすること、そしてそれ以上のものを行います。
—
フィリップ
これは本当に古いので、明確な質問はおそらく答えられないでしょう。同様に、これはWPFまたはUAPと関係がありますか?
—
Berin Loritsch
ICommand
これらのテクノロジーで定義され、広く使用されているため、それを私の心から離すことは困難です。最終目標は何ですか?おそらく、基礎となる概念は、いくつかの洗練を使用することができます。