using System.Threading.Tasks;
using Microsoft.Practices.Unity;
public static void Main()
Console.WriteLine("Hello World");
var container = new UnityContainer()
.RegisterType<ICommandHandlerAsync<RegisterMemberCommand>, RegisterMemberCommandHandler>()
.RegisterType<ICommandHandlerAsync<UnregisterMemberCommand>, UnregisterMemberCommandHandler>()
.RegisterType<ICommandHandlerFactory, CommandHandlerFactory>();
var factory = container.Resolve<ICommandHandlerFactory>();
var registerCommand = new RegisterMemberCommand();
var unregisterCommand = new UnregisterMemberCommand();
factory.GetHandlerFor(registerCommand).Handle(registerCommand);
factory.GetHandlerFor(unregisterCommand).Handle(unregisterCommand);
public interface ICommandHandlerAsync<TCommand>
Task Handle(TCommand command);
public interface ICommandHandlerFactory
ICommandHandlerAsync<TCommand> GetHandlerFor<TCommand>(TCommand command);
public class CommandHandlerFactory: ICommandHandlerFactory
private IUnityContainer container;
public CommandHandlerFactory(IUnityContainer container)
this.container = container;
public ICommandHandlerAsync<TCommand> GetHandlerFor<TCommand>(TCommand command)
return this.container.Resolve<ICommandHandlerAsync<TCommand>>();
public class RegisterMemberCommand {}
public class UnregisterMemberCommand {}
public class RegisterMemberCommandHandler: ICommandHandlerAsync<RegisterMemberCommand>
public Task Handle(RegisterMemberCommand command)
Console.WriteLine("Executed RegisterMemberCommand");
return Task.FromResult(0);
public class UnregisterMemberCommandHandler: ICommandHandlerAsync<UnregisterMemberCommand>
public Task Handle(UnregisterMemberCommand command)
Console.WriteLine("Executed UnregisterMemberCommand");
return Task.FromResult(0);