コード例 #1
0
        private static object DoCreateTargetExtensionObject(Type targetType, string extensionName)
        {
            // Get target extension type
            var targetExtensionType = _extensionTypeByExtensionKey.GetOrAdd(
                new ExtensionKey(targetType, extensionName),
                key =>
            {
                string assemblyQualifiedName =
                    ExtensionsConventions.GetExtensionClassAssemblyQualifiedName(key.EdFiStandardType, key.ExtensionName);

                return(Type.GetType(assemblyQualifiedName));
            });

            // Create the target extension object
            return(targetExtensionType != null
                ? Activator.CreateInstance(targetExtensionType)
                : null);
        }
コード例 #2
0
 protected override void Act()
 {
     _actualResult = ExtensionsConventions.GetExtensionClassAssemblyQualifiedName(typeof(StaffResource), "GrandBend");
 }
コード例 #3
0
        private void RegisterExtensions(Assembly assembly, IEntityExtensionRegistrar registrar, IWindsorContainer container)
        {
            string extensionAssemblyName = assembly.GetName()
                                           .Name;

            var extensionSchemaProperCaseName = ExtensionsConventions.GetProperCaseNameFromAssemblyName(extensionAssemblyName);

            var domainModel = container.Resolve <IDomainModelProvider>()
                              .GetDomainModel();

            string schemaPhysicalName = domainModel.SchemaNameMapProvider
                                        .GetSchemaMapByProperCaseName(extensionSchemaProperCaseName)
                                        .PhysicalName;

            var extensionsByStandardEntity = domainModel
                                             .Entities
                                             .Where(e => e.Schema.Equals(schemaPhysicalName) && (e.IsEntityExtension || e.IsAggregateExtensionTopLevelEntity))
                                             .Select(
                e => new
            {
                Parent            = e.Parent, Entity = e, IsAggregateExtension = e.IsAggregateExtension,
                IsEntityExtension = e.IsEntityExtension
            })
                                             .GroupBy(x => x.Parent, x => x)
                                             .ToList();

            var aggregateExtensionEntities = extensionsByStandardEntity
                                             .SelectMany(x => x)
                                             .Where(x => x.IsAggregateExtension)
                                             .Select(x => x.Entity);

            var entityExtensions = extensionsByStandardEntity
                                   .SelectMany(x => x)
                                   .Where(x => x.IsEntityExtension)
                                   .Select(
                x => new
            {
                Entity     = x.Entity,
                IsRequired = x.Entity.ParentAssociation.Association.Cardinality == Cardinality.OneToOneExtension
            });

            // Register aggregate extensions
            foreach (var aggregateExtensionEntity in aggregateExtensionEntities)
            {
                string standardTypeName = aggregateExtensionEntity.Parent.EntityTypeFullName(EdFiConventions.ProperCaseName);
                var    standardType     = Type.GetType($"{standardTypeName}, {Namespaces.Standard.BaseNamespace}");

                registrar.RegisterAggregateExtensionEntity(standardType, aggregateExtensionEntity);
            }

            // Register explicit entity extensions
            foreach (var entityExtension in entityExtensions)
            {
                string standardTypeName = entityExtension.Entity.EdFiStandardEntity.EntityTypeFullName(EdFiConventions.ProperCaseName);
                var    standardType     = Type.GetType($"{standardTypeName}, {Namespaces.Standard.BaseNamespace}");

                string extensionTypeName = entityExtension.Entity.EntityTypeFullName(extensionSchemaProperCaseName);
                var    extensionType     = Type.GetType($"{extensionTypeName}, {extensionAssemblyName}");

                registrar.RegisterEntityExtensionType(standardType, extensionSchemaProperCaseName, extensionType, entityExtension.IsRequired);
            }

            // Register implicit entity extensions
            // Filter down to just the standard entities that have aggregate extensions, but no entity extensions (need implicit extension classes registered)
            var implicitlyExtendedEntities = extensionsByStandardEntity
                                             .Where(p => p.Any(x => x.IsAggregateExtension) && !p.Any(x => x.IsEntityExtension));

            foreach (var implicitlyExtendedEntity in implicitlyExtendedEntities)
            {
                string standardTypeName = implicitlyExtendedEntity.Key.EntityTypeFullName(EdFiConventions.ProperCaseName);
                var    standardType     = Type.GetType($"{standardTypeName}, {Namespaces.Standard.BaseNamespace}");

                string extensionClassAssemblyQualifiedName =
                    ExtensionsConventions.GetExtensionClassAssemblyQualifiedName(standardType, extensionSchemaProperCaseName);

                var extensionType = Type.GetType(extensionClassAssemblyQualifiedName);

                registrar.RegisterEntityExtensionType(standardType, extensionSchemaProperCaseName, extensionType, isRequired: true);
            }
        }