コード例 #1
0
        // This class doesn't implement the IServiceProvider.  That is done
        // with worker classes ValueConverterContext or MarkupConverterContext.
        // The worker class implements IServiceProvider but uses the real
        // context for the implementation of the actual services.

        internal Type ServiceProvider_Resolve(string qName)
        {
            // As soon as we have the necessary setting on ObjectWriter, we need to start passing
            // the local assembly into the context; currently, this will only return publics.
            XamlType xamlType = ServiceProvider_ResolveXamlType(qName);

            if (xamlType == null || xamlType.UnderlyingType == null)
            {
                XamlTypeName name = XamlTypeName.Parse(qName, _serviceProviderContext);
                xamlType = GetXamlType(name, true, true);
                throw new XamlParseException(SR.Get(SRID.TypeNotFound, xamlType.GetQualifiedName()));
            }
            return(xamlType.UnderlyingType);
        }
 public override void WriteStartObject(XamlType xamlType)
 {
     this.ThrowIfDisposed();
     if (xamlType == null)
     {
         throw new ArgumentNullException("xamlType");
     }
     this._deferringWriter.WriteStartObject(xamlType);
     if (!this._deferringWriter.Handled)
     {
         if (this._nextNodeMustBeEndMember)
         {
             string message = System.Xaml.SR.Get("ValueMustBeFollowedByEndMember");
             throw this.WithLineInfo(new XamlObjectWriterException(message));
         }
         if (xamlType.IsUnknown)
         {
             string str2 = System.Xaml.SR.Get("CantCreateUnknownType", new object[] { xamlType.GetQualifiedName() });
             throw this.WithLineInfo(new XamlObjectWriterException(str2));
         }
         if ((this._context.CurrentType != null) && (this._context.CurrentProperty == null))
         {
             string str3 = System.Xaml.SR.Get("NoPropertyInCurrentFrame_SO", new object[] { xamlType.ToString(), this._context.CurrentType.ToString() });
             throw this.WithLineInfo(new XamlObjectWriterException(str3));
         }
         this._lastInstance = null;
         if (this._context.CurrentType != null)
         {
             this._context.PushScope();
         }
         this._context.CurrentType = xamlType;
         if ((this._context.LiveDepth == 1) && (this._rootObjectInstance != null))
         {
             XamlType type = this.GetXamlType(this._rootObjectInstance.GetType());
             if (!type.CanAssignTo(this._context.CurrentType))
             {
                 throw new XamlParseException(System.Xaml.SR.Get("CantAssignRootInstance", new object[] { type.GetQualifiedName(), xamlType.GetQualifiedName() }));
             }
             this._context.CurrentInstance = this._rootObjectInstance;
             if (this._context.CurrentType.IsCollection || this._context.CurrentType.IsDictionary)
             {
                 this._context.CurrentCollection = this._rootObjectInstance;
             }
             this.Logic_BeginInit(this._context);
         }
     }
 }
コード例 #3
0
        internal Type ServiceProvider_Resolve(string qName)
        {
            XamlType type = this.ServiceProvider_ResolveXamlType(qName);

            if ((type != null) && (type.UnderlyingType != null))
            {
                return(type.UnderlyingType);
            }
            XamlTypeName typeName = XamlTypeName.Parse(qName, this._serviceProviderContext);

            type = base.GetXamlType(typeName, true, true);
            throw new XamlParseException(System.Xaml.SR.Get("TypeNotFound", new object[] { type.GetQualifiedName() }));
        }