コード例 #1
0
        internal static ObjectItemAssemblyLoader CreateLoader(Assembly assembly, ObjectItemLoadingSessionData sessionData)
        {
            ImmutableAssemblyCacheEntry cacheEntry;

            // KnownAssembly -> NoOp
            // Inside the LockedAssemblyCache means it is an attribute based assembly -> Cachedassembly
            // Inside the OcCache on EdmItemCollection -> cachedassembly
            // If none of above, setup the LoaderFactory based on the current assembly and EdmItemCollection
            if (sessionData.KnownAssemblies.Contains(assembly, sessionData.ObjectItemAssemblyLoaderFactory, sessionData.EdmItemCollection))
            {
                return(new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
            }
            else if (sessionData.LockedAssemblyCache.TryGetValue(assembly, out cacheEntry))
            {
                if (sessionData.ObjectItemAssemblyLoaderFactory == null)
                {
                    if (cacheEntry.TypesInAssembly.Count != 0)
                    {
                        // we are loading based on attributes now
                        sessionData.ObjectItemAssemblyLoaderFactory = ObjectItemAttributeAssemblyLoader.Create;
                    }
                    // if types in assembly are 0, don't commit to any loader yet
                }
                else if (sessionData.ObjectItemAssemblyLoaderFactory
                         != ObjectItemAttributeAssemblyLoader.Create)
                {
                    // we were loading in convention mode, and ran into an assembly that can't be loaded by convention
                    // we know this because all cached assemblies are attribute based at the moment.
                    sessionData.EdmItemErrors.Add(
                        new EdmItemError(Strings.Validator_OSpace_Convention_AttributeAssemblyReferenced(assembly.FullName)));
                }
                return(new ObjectItemCachedAssemblyLoader(assembly, cacheEntry, sessionData));
            }
            else if (sessionData.EdmItemCollection != null
                     &&
                     sessionData.EdmItemCollection.ConventionalOcCache.TryGetConventionalOcCacheFromAssemblyCache(
                         assembly, out cacheEntry))
            {
                sessionData.ObjectItemAssemblyLoaderFactory = ObjectItemConventionAssemblyLoader.Create;
                return(new ObjectItemCachedAssemblyLoader(assembly, cacheEntry, sessionData));
            }
            else if (sessionData.ObjectItemAssemblyLoaderFactory == null)
            {
                if (ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(assembly))
                {
                    sessionData.ObjectItemAssemblyLoaderFactory = ObjectItemAttributeAssemblyLoader.Create;
                }
                else if (ObjectItemConventionAssemblyLoader.SessionContainsConventionParameters(sessionData))
                {
                    sessionData.ObjectItemAssemblyLoaderFactory = ObjectItemConventionAssemblyLoader.Create;
                }
            }

            if (sessionData.ObjectItemAssemblyLoaderFactory != null)
            {
                return(sessionData.ObjectItemAssemblyLoaderFactory(assembly, sessionData));
            }

            return(new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
        }
コード例 #2
0
 internal static ObjectItemAssemblyLoader Create(
     Assembly assembly,
     ObjectItemLoadingSessionData sessionData)
 {
     if (!ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(assembly))
     {
         return((ObjectItemAssemblyLoader) new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
     }
     return((ObjectItemAssemblyLoader) new ObjectItemAttributeAssemblyLoader(assembly, sessionData));
 }
コード例 #3
0
 /// <summary>
 ///     Explicit loading means that the user specifically asked us to load this assembly.
 ///     We won't do any filtering, they "know what they are doing"
 /// </summary>
 internal void ExplicitLoadFromAssembly(Assembly assembly, EdmItemCollection edmItemCollection, Action <String> logLoadMessage)
 {
     LoadAssemblyFromCache(this, assembly, false /*loadAllReferencedAssemblies*/, edmItemCollection, logLoadMessage);
     //Since User called LoadFromAssembly, so we should collect the generated views if present
     //even if the schema attribute is not present
     if (IsCompiledViewGenAttributePresent(assembly) &&
         !ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(assembly))
     {
         CollectIfViewGenAssembly(assembly);
     }
 }
 internal static ObjectItemAssemblyLoader Create(
     Assembly assembly,
     ObjectItemLoadingSessionData sessionData)
 {
     if (!ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(assembly))
     {
         return((ObjectItemAssemblyLoader) new ObjectItemConventionAssemblyLoader(assembly, sessionData));
     }
     sessionData.EdmItemErrors.Add(new EdmItemError(Strings.Validator_OSpace_Convention_AttributeAssemblyReferenced((object)assembly.FullName)));
     return((ObjectItemAssemblyLoader) new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
 }
コード例 #5
0
        internal static ObjectItemAssemblyLoader Create(Assembly assembly, ObjectItemLoadingSessionData sessionData)
        {
            if (!ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(assembly))
            {
                return(new ObjectItemConventionAssemblyLoader(assembly, sessionData));
            }

            // we were loading in convention mode, and ran into an assembly that can't be loaded by convention
            sessionData.EdmItemErrors.Add(
                new EdmItemError(Strings.Validator_OSpace_Convention_AttributeAssemblyReferenced(assembly.FullName)));
            return(new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
        }
コード例 #6
0
        internal static ObjectItemAssemblyLoader CreateLoader(
            Assembly assembly,
            ObjectItemLoadingSessionData sessionData)
        {
            if (sessionData.KnownAssemblies.Contains(assembly, (object)sessionData.ObjectItemAssemblyLoaderFactory, sessionData.EdmItemCollection))
            {
                return((ObjectItemAssemblyLoader) new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
            }
            ImmutableAssemblyCacheEntry cacheEntry;

            if (sessionData.LockedAssemblyCache.TryGetValue(assembly, out cacheEntry))
            {
                if (sessionData.ObjectItemAssemblyLoaderFactory == null)
                {
                    if (cacheEntry.TypesInAssembly.Count != 0)
                    {
                        sessionData.ObjectItemAssemblyLoaderFactory = new Func <Assembly, ObjectItemLoadingSessionData, ObjectItemAssemblyLoader>(ObjectItemAttributeAssemblyLoader.Create);
                    }
                }
                else if (sessionData.ObjectItemAssemblyLoaderFactory != new Func <Assembly, ObjectItemLoadingSessionData, ObjectItemAssemblyLoader>(ObjectItemAttributeAssemblyLoader.Create))
                {
                    sessionData.EdmItemErrors.Add(new EdmItemError(Strings.Validator_OSpace_Convention_AttributeAssemblyReferenced((object)assembly.FullName)));
                }
                return((ObjectItemAssemblyLoader) new ObjectItemCachedAssemblyLoader(assembly, cacheEntry, sessionData));
            }
            if (sessionData.EdmItemCollection != null && sessionData.EdmItemCollection.ConventionalOcCache.TryGetConventionalOcCacheFromAssemblyCache(assembly, out cacheEntry))
            {
                sessionData.ObjectItemAssemblyLoaderFactory = new Func <Assembly, ObjectItemLoadingSessionData, ObjectItemAssemblyLoader>(ObjectItemConventionAssemblyLoader.Create);
                return((ObjectItemAssemblyLoader) new ObjectItemCachedAssemblyLoader(assembly, cacheEntry, sessionData));
            }
            if (sessionData.ObjectItemAssemblyLoaderFactory == null)
            {
                if (ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(assembly))
                {
                    sessionData.ObjectItemAssemblyLoaderFactory = new Func <Assembly, ObjectItemLoadingSessionData, ObjectItemAssemblyLoader>(ObjectItemAttributeAssemblyLoader.Create);
                }
                else if (ObjectItemConventionAssemblyLoader.SessionContainsConventionParameters(sessionData))
                {
                    sessionData.ObjectItemAssemblyLoaderFactory = new Func <Assembly, ObjectItemLoadingSessionData, ObjectItemAssemblyLoader>(ObjectItemConventionAssemblyLoader.Create);
                }
            }
            if (sessionData.ObjectItemAssemblyLoaderFactory != null)
            {
                return(sessionData.ObjectItemAssemblyLoaderFactory(assembly, sessionData));
            }
            return((ObjectItemAssemblyLoader) new ObjectItemNoOpAssemblyLoader(assembly, sessionData));
        }
コード例 #7
0
 private void TrackClosure(Type type)
 {
     if (this.SourceAssembly != type.Assembly() && !this.CacheEntry.ClosureAssemblies.Contains(type.Assembly()) && ObjectItemAttributeAssemblyLoader.IsSchemaAttributePresent(type.Assembly()) && (!type.IsGenericType() || !EntityUtil.IsAnICollection(type) && !(type.GetGenericTypeDefinition() == typeof(EntityReference <>)) && !(type.GetGenericTypeDefinition() == typeof(Nullable <>))))
     {
         this.CacheEntry.ClosureAssemblies.Add(type.Assembly());
     }
     if (!type.IsGenericType())
     {
         return;
     }
     foreach (Type genericArgument in type.GetGenericArguments())
     {
         this.TrackClosure(genericArgument);
     }
 }