private static void ConfigureProfiling(TinyIoCContainer container)
        {
            container.Register <IStopwatch>((c, p) => new StopwatchAdapter(new Stopwatch()));
            container.Register <IProfiler>((c, p) => new Profiler(c.Resolve <IStopwatch>()));
            var profiler = container.Resolve <IProfiler>();
            var impl     = new RepoImplementations(container);

            container.Register <IRepositoryReader <RoomRecord> >(new RepositoryProfiler <RoomRecord>(
                                                                     impl.RoomReader,
                                                                     impl.RoomWriter,
                                                                     profiler
                                                                     ));
            container.Register <IRepositoryWriter <RoomRecord> >(new RepositoryProfiler <RoomRecord>(
                                                                     impl.RoomReader,
                                                                     impl.RoomWriter,
                                                                     profiler
                                                                     ));

            // message
            container.Register <IRepositoryReader <MessageRecord> >(new RepositoryProfiler <MessageRecord>(
                                                                        impl.MessageReader,
                                                                        impl.MessageWriter,
                                                                        profiler
                                                                        ));

            container.Register <IRepositoryWriter <MessageRecord> >(new RepositoryProfiler <MessageRecord>(
                                                                        impl.MessageReader,
                                                                        impl.MessageWriter,
                                                                        profiler
                                                                        ));

            // login
            container.Register <IRepositoryWriter <LoginRecord> >(new RepositoryProfiler <LoginRecord>(
                                                                      impl.LoginReader,
                                                                      impl.LoginWriter,
                                                                      profiler
                                                                      ));

            container.Register <ILoginReader>(new LoginRepositoryProfiler(
                                                  impl.LoginReader,
                                                  profiler
                                                  ));

            // users
            container.Register <IRepositoryWriter <UserRecord> >(new RepositoryProfiler <UserRecord>(
                                                                     impl.UserReader,
                                                                     impl.UserWriter,
                                                                     profiler
                                                                     ));
            container.Register <IRepositoryReader <UserRecord> >(new RepositoryProfiler <UserRecord>(
                                                                     impl.UserReader,
                                                                     impl.UserWriter,
                                                                     profiler
                                                                     ));
        }
        private void ConfigureDataEventPublisher(TinyIoCContainer container)
        {
            // data events
            var eventPublisher = container.Resolve <IEventPublisher>();

            eventPublisher.AddSubscriber(container.Resolve <IEventSubscriber>("outDataSync"));

            var impl = new RepoImplementations(container);

            container.Register <IRepositoryReader <RoomRecord> >(new RepositoryEventPublisher <RoomRecord>(
                                                                     impl.RoomReader,
                                                                     impl.RoomWriter,
                                                                     eventPublisher
                                                                     ));
            container.Register <IRepositoryWriter <RoomRecord> >(new RepositoryEventPublisher <RoomRecord>(
                                                                     impl.RoomReader,
                                                                     impl.RoomWriter,
                                                                     eventPublisher
                                                                     ));

            // message
            container.Register <IRepositoryReader <MessageRecord> >(new RepositoryEventPublisher <MessageRecord>(
                                                                        impl.MessageReader,
                                                                        impl.MessageWriter,
                                                                        eventPublisher
                                                                        ));

            container.Register <IRepositoryWriter <MessageRecord> >(new RepositoryEventPublisher <MessageRecord>(
                                                                        impl.MessageReader,
                                                                        impl.MessageWriter,
                                                                        eventPublisher
                                                                        ));

            // login
            container.Register <IRepositoryWriter <LoginRecord> >(new RepositoryEventPublisher <LoginRecord>(
                                                                      impl.LoginReader,
                                                                      impl.LoginWriter,
                                                                      eventPublisher
                                                                      ));


            // users
            container.Register <IRepositoryWriter <UserRecord> >(new RepositoryEventPublisher <UserRecord>(
                                                                     impl.UserReader,
                                                                     impl.UserWriter,
                                                                     eventPublisher
                                                                     ));
            container.Register <IRepositoryReader <UserRecord> >(new RepositoryEventPublisher <UserRecord>(
                                                                     impl.UserReader,
                                                                     impl.UserWriter,
                                                                     eventPublisher
                                                                     ));
        }