public void SetUp()
        {
            iocProvider = new AutofacProvider($@"{ AppDomain.CurrentDomain.BaseDirectory}repoconfig\autofac.repo.reader.json",
                                              $@"{AppDomain.CurrentDomain.BaseDirectory}repoconfig\autofac.repo.writer.json",
                                              $@"{AppDomain.CurrentDomain.BaseDirectory}moduleconfig\autofac.modules.json");

            //add the configues out of configue files in PreBuild
            iocProvider.PreBuild((builder) => {
                //Interceptor only can be configured by code
                //PersonCommandHandler dependents object that registered in config file
                builder.RegisterType <PersonCommandHandler>()
                .As <IPersonCommandHandler>()
                .EnableInterfaceInterceptors();
                builder.Register(c => new CommandPropertyValidator());


                //Application services
                builder.RegisterType <PersonQueryService>()
                .As <IPersonQueryServiceContract>()
                .EnableInterfaceInterceptors();
                builder.RegisterType <PersonCommandService>()
                .As <IPersonCommandServiceContract>()
                .EnableInterfaceInterceptors();


                //Register ErrorHandler
                builder.RegisterType <UnKnownErrorHandler>()
                .As <IUnKnownErrorHandler>();
                builder.RegisterType <NegativeErrorHandler>()
                .As <INegativeErrorHandler>();

                //Register LoggerController
                builder.RegisterType <LoggerFactory>()
                .As <ILoggerFactory>();
                builder.RegisterType <LoggerController <VersionedEvent> >()
                .As <ILoggerController <VersionedEvent> >();
                builder.RegisterType <LoggerController <ExceptionEvent> >()
                .As <ILoggerController <ExceptionEvent> >();
                builder.RegisterType <LoggerController <UnKnownErrorEvent> >()
                .As <ILoggerController <UnKnownErrorEvent> >();
            });

            iocProvider.Build();
            handler = iocProvider.GetContainer().Resolve <IPersonCommandServiceContract>();
        }
        public void Application_Person_Modify_Test(int id, string firstName, string lastName, int age)
        {
            handler.Apply(new CreateNewPersonCommand()
            {
                FirstName = firstName,
                LastName  = lastName,
                Age       = age
            });

            handler = iocProvider.GetContainer().Resolve <IPersonCommandServiceContract>();

            handler.Apply(new ModifyExistingPersonCommand()
            {
                Id        = id,
                FirstName = firstName,
                LastName  = lastName,
                Age       = age
            });
        }
 public PersonController(IPersonQueryServiceContract queryService,
                         IPersonCommandServiceContract commandService)
 {
     _queryService   = queryService;
     _commandService = commandService;
 }