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) )); }