public static void CreateUser(CreateUser request, Func<IUserRepository> userRepositoryFactory, ILogger logger) { using (var userRepository = userRepositoryFactory()) { var user = new User { Name = request.Name }; userRepository.Add(user); userRepository.Save(); logger.Info("UserServiceModule: User Created"); } }
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() { // 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() { 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(); }
public IHttpActionResult CreateUser(CreateUser request) { _app.Handle(request); return Ok(); }