using System.Threading.Tasks;
public static void Main()
var iocContainer = GetContainer();
var controller = iocContainer.Resolve<Controller>();
Console.WriteLine(controller.Query("World").Result);
public static IContainer GetContainer()
var container = new Container();
container.RegisterDelegate<SingleInstanceFactory>(r => serviceType => r.Resolve(serviceType));
container.RegisterDelegate<MultiInstanceFactory>(r => serviceType => r.ResolveMany(serviceType));
container.Register<IMediator, Mediator>();
container.Register<IAsyncRequestHandler<HelloRequest, string>, HelloRequestHandler>();
container.Register<Controller>();
public class HelloRequest : IRequest<string>
public string Name { get; set; }
public class HelloRequestHandler : IAsyncRequestHandler<HelloRequest, string>
public async Task<string> Handle(HelloRequest message)
return await Task.FromResult("Hello, " + message.Name);
private readonly IMediator _mediator;
public Controller(IMediator mediator)
public async Task<string> Query(string name)
return await _mediator.Send(new HelloRequest {Name = name});