Example #1
0
        private void CreateAccessor()
        {
            var nodeConfiguration = new NodeConfiguration();
            var configuration     = DomainConfigurationFactory.Create();
            var descriptor        = ProviderDescriptor.Get(configuration.ConnectionInfo.Provider);
            var driverFactory     = (SqlDriverFactory)Activator.CreateInstance(descriptor.DriverFactory);
            var storageDriver     = StorageDriver.Create(driverFactory, configuration);
            var nameBuilder       = new NameBuilder(configuration, storageDriver.ProviderInfo);
            var handlerFactory    = (HandlerFactory)Activator.CreateInstance(descriptor.HandlerFactory);

            var accessor = new UpgradeServiceAccessor {
                Configuration  = configuration,
                StorageDriver  = storageDriver,
                NameBuilder    = nameBuilder,
                HandlerFactory = handlerFactory
            };

            configuration.Lock();
            var connection = storageDriver.CreateConnection(null);

            connection.Open();
            accessor.MappingResolver = MappingResolver.Create(configuration, nodeConfiguration, storageDriver.GetDefaultSchema(connection));
            if (storageDriver.ProviderInfo.Supports(ProviderFeatures.SingleConnection))
            {
                accessor.RegisterTemporaryResource(connection);
            }
            else
            {
                accessor.RegisterResource(connection);
            }
            accessor.Connection = connection;
            accessor.Connection.Extensions.AddOne(new TypeDelegator(typeof(IProviderExecutor)));

            this.accessor = accessor;
        }
        internal NodeExtractedModelBuilder(UpgradeServiceAccessor services, StorageNode defaultNode, NodeConfiguration buildingNodeConfiguration, bool defaultNodeIsUnreadable)
        {
            ArgumentValidator.EnsureArgumentNotNull(services, "services");
            ArgumentValidator.EnsureArgumentNotNull(defaultNode, "defaultNode");
            ArgumentValidator.EnsureArgumentNotNull(buildingNodeConfiguration, "buildingNodeConfiguration");

            mappingResolver = services.MappingResolver;
            this.buildingNodeConfiguration = buildingNodeConfiguration;
            defaultStorageNode             = defaultNode;
            buildAsCopy = !defaultNodeIsUnreadable;
        }
        private static void BuildUpgradeHandlers(UpgradeServiceAccessor serviceAccessor, IServiceContainer serviceContainer)
        {
            // Getting user handlers
            var userHandlers =
                from handler in serviceContainer.GetAll <IUpgradeHandler>()
                let assembly = handler.Assembly ?? handler.GetType().Assembly
                               where handler.IsEnabled
                               group handler by assembly;

            // Adding user handlers
            var handlers = new Dictionary <Assembly, IUpgradeHandler>();

            foreach (var group in userHandlers)
            {
                var candidates = group.ToList();
                if (candidates.Count > 1)
                {
                    throw new DomainBuilderException(
                              string.Format(Strings.ExMoreThanOneEnabledXIsProvidedForAssemblyY, typeof(IUpgradeHandler).GetShortName(), @group.Key));
                }
                handlers.Add(group.Key, candidates[0]);
            }

            // Adding default handlers
            var assembliesWithUserHandlers   = handlers.Select(pair => pair.Key);
            var assembliesWithoutUserHandler =
                serviceAccessor.Configuration.Types.PersistentTypes
                .Select(type => type.Assembly)
                .Distinct()
                .Except(assembliesWithUserHandlers);

            foreach (var assembly in assembliesWithoutUserHandler)
            {
                var handler = new UpgradeHandler(assembly);
                handlers.Add(assembly, handler);
            }

            // Building a list of handlers sorted by dependencies of their assemblies
            var dependencies = handlers.Keys.ToDictionary(
                assembly => assembly,
                assembly => new HashSet <string>(assembly.GetReferencedAssemblies().Select(assemblyName => assemblyName.ToString())));
            var sortedHandlers = handlers
                                 .SortTopologically((a0, a1) => dependencies[a1.Key].Contains(a0.Key.GetName().ToString()))
                                 .Select(pair => pair.Value);

            // Storing the result
            serviceAccessor.UpgradeHandlers =
                new ReadOnlyDictionary <Assembly, IUpgradeHandler>(handlers);
            serviceAccessor.OrderedUpgradeHandlers =
                new ReadOnlyList <IUpgradeHandler>(sortedHandlers.ToList());
        }
        internal DomainExtractedModelBuilder(UpgradeServiceAccessor services, StorageModel model, bool makeSharedFinally)
        {
            ArgumentValidator.EnsureArgumentNotNull(services, "services");
            ArgumentValidator.EnsureArgumentNotNull(model, "model");
            this.model             = model;
            this.mappingResolver   = services.MappingResolver;
            this.provider          = services.ProviderInfo;
            this.driver            = services.StorageDriver;
            this.makeSharedFinally = makeSharedFinally;

            this.targetResult = new SchemaExtractionResult();

            if (provider.Supports(ProviderFeatures.Collations))
            {
                var collation = services.Configuration.Collation;
                if (!string.IsNullOrEmpty(collation))
                {
                    collationName = collation;
                }
            }
        }
        private void BuildExternalServices(UpgradeServiceAccessor serviceAccessor, UpgradeContext context)
        {
            var configuration         = context.Configuration;
            var standardRegistrations = new[] {
                new ServiceRegistration(typeof(DomainConfiguration), context.Configuration),
                new ServiceRegistration(typeof(UpgradeContext), context)
            };

            var modules = configuration.Types.Modules
                          .Select(type => new ServiceRegistration(typeof(IModule), type, false));
            var handlers = configuration.Types.UpgradeHandlers
                           .Select(type => new ServiceRegistration(typeof(IUpgradeHandler), type, false));

            var registrations    = standardRegistrations.Concat(modules).Concat(handlers);
            var serviceContainer = new ServiceContainer(registrations);

            serviceAccessor.RegisterResource(serviceContainer);

            BuildModules(serviceAccessor, serviceContainer);
            BuildUpgradeHandlers(serviceAccessor, serviceContainer);
        }
 private static void BuildModules(UpgradeServiceAccessor serviceAccessor, IServiceContainer serviceContainer)
 => serviceAccessor.Modules = new ReadOnlyList <IModule>(serviceContainer.GetAll <IModule>().ToList());