public void BuildConfiguration()
        {
            Guard.Against <ArgumentNullException>(Container == null, "Ошибка построения конфигурации: не определен Unity - контейнер");
            Guard.Against <ArgumentNullException>(NCommonConfigActions != null && NCommonConfigGets != null, "Ошибка построения конфигурации: определено две взаимоисключающие конфигурации NCommon");

            try
            {
                if (NCommonConfigActions != null)
                {
                    var adapter = new UnityContainerAdapter(Container);
                    NCommonConfigActions(Configure.Using(adapter));
                }
                else if (NCommonConfigGets != null)
                {
                    NCommonConfigGets(Container);
                }

                if (!BusinessOperationConfigs.IsNullOrEmpty())
                {
                    BusinessOperationConfigs.ForEach(config => config.Value.Confugure(Container));
                }

                if (ProcessConfig != null)
                {
                    ProcessConfig.Confugure(Container);
                }

                //Validate
                var validStr = Container.GetMappingAsString();
            }
            catch (Exception e)
            {
                throw;
            }
        }
 /// <summary>
 /// Конфигурация NCommon для тестирования. Для корректной инфициализации необходимо зарегистрировать IRepository<> и IUnitOfWorkFactory
 /// через dataRegisteredActions
 /// </summary>
 /// <param name="container"></param>
 /// <param name="dataRegisteredActions"></param>
 /// <returns></returns>
 public static INCommonConfig GetTest(IUnityContainer container, Action <IContainerAdapter> dataRegisteredActions)
 {
     return
         (Configure.Using(new UnityContainerAdapter(container))
          .ConfigureState <DefaultStateConfiguration>()
          .ConfigureData <TestDataConfiguration>(t => t.Register(dataRegisteredActions))
          .ConfigureUnitOfWork <DefaultUnitOfWorkConfiguration>());
 }
 /// <summary>
 /// Конфигурация NCommon с поддержкой бизнес-транзакций
 /// </summary>
 /// <typeparam name="TLoggingContext"></typeparam>
 /// <typeparam name="TContext"></typeparam>
 /// <param name="container"></param>
 /// <param name="user"></param>
 /// <param name="contextProvider"></param>
 /// <returns></returns>
 public static INCommonConfig GetEFWithTransaction <TLoggingContext, TContext>(IUnityContainer container, IUser user, Func <TLoggingContext> contextProvider)//, Func<TContext, ILoggingAdapter> loggerProvider)
     where TContext : DbContext
     where TLoggingContext : ILoggerDataContext <TContext>
 {
     return
         (Configure.Using(new UnityContainerAdapter(container))
          .ConfigureState <DefaultStateConfiguration>(state => state.UseCustomLocalStateOf <ThreadLocalState>())
          .ConfigureData <UnityEFConfiguration <TLoggingContext, TContext> >(dataConfig => dataConfig.WithObjectContextAndLogger(() => (TLoggingContext)contextProvider().RegisterLoggerProvider(c => new StubLoggingAdapter(c, user))))
          .ConfigureUnitOfWork <UnityBusinessTransactionUnitOfWorkConfiguration>(uowConfig =>
                                                                                 uowConfig//.WithTransactionManager((settings) => new UnityTransactionManager(container, settings))
                                                                                 .WithDefaultIsolation(IsolationLevel.ReadUncommitted)
                                                                                 ));
 }