static void Main() { // Configure your DI container var container = new UnityContainer(); container.RegisterType <IUserRepository, InMemoryUserRepository>(); container.RegisterType <ILogger, ConsoleLogger>(); container.RegisterType(typeof(IHandle <CreateUser>), typeof(UserService)); // Create common service locator adapter var unityServiceLocatorAdapter = new UnityServiceLocator(container); // Initilaize the AppDispatcher AppDispatcher.Initialize(app => { app.UseCommonServiceLocator(unityServiceLocatorAdapter); }); // Create a request var request = new CreateUser { Name = "Jane Smith" }; // Handle it using the dispatcher, if DI is configured correctly // the message handler in your application service will handle it. AppDispatcher.Handle(request); }
static void Main() { // Look ma, no DI container! var logger = new ConsoleLogger(); Func <IUserRepository> userRepositoryFactory = () => new InMemoryUserRepository(); AppDispatcher.Initialize(app => { app.RegisterHandler <CreateUser>(createUserRequest => { UserServiceModule.CreateUser(createUserRequest, userRepositoryFactory, logger); }); }); var request = new CreateUser { Name = "Jane Smith" }; AppDispatcher.Handle(request); }
static void Main() { var container = new Container(); container.Register <IUserRepository, InMemoryUserRepository>(); container.Register <ILogger, ConsoleLogger>(); container.RegisterManyForOpenGeneric(typeof(IHandle <>), AppDomain.CurrentDomain.GetAssemblies()); container.RegisterDecorator(typeof(IHandle <>), typeof(LoggingDecorator <>)); var simpleInjectorServiceLocatorAdapter = new SimpleInjectorServiceLocatorAdapter(container); AppDispatcher.Initialize(app => { // Decorating the pipline AND using IoC: you will see // the action pipleine below wraps any IoC decorators app.GlobalPipeline(pipeline => pipeline.Decorate(handler => { Console.WriteLine("before a"); handler(); Console.WriteLine("after a"); }).Decorate(handler => { Console.WriteLine("before b"); handler(); Console.WriteLine("after b"); }), true); app.UseCommonServiceLocator(simpleInjectorServiceLocatorAdapter); }); var request = new CreateUser { Name = "Jane Smith" }; AppDispatcher.Handle(request); Console.ReadLine(); }