WrappingXamlSchemaContext.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / XamlBuildTask / Microsoft / Build / Tasks / Xaml / WrappingXamlSchemaContext.cs / 1305376 / WrappingXamlSchemaContext.cs

                            using System; 
using System.Collections.Generic;
using System.Text;
using System.Xaml;
using System.Reflection; 

namespace Microsoft.Build.Tasks.Xaml 
{ 
    class XamlNsReplacingContext : XamlSchemaContext
    { 
        string localAssemblyName;
        string realAssemblyName;
        IDictionary MasterTypeList;
 
        public XamlNsReplacingContext(IEnumerable referenceAssemblies, string localAssemblyName, string realAssemblyName)
            : base(referenceAssemblies) 
        { 
            this.localAssemblyName = localAssemblyName;
            this.realAssemblyName = realAssemblyName; 
            MasterTypeList = new Dictionary();
        }

        public override XamlType GetXamlType(Type type) 
        {
            if (type == null) 
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("type"));
            } 
            XamlNsReplacingType xamlType = null;
            if (!MasterTypeList.TryGetValue(type, out xamlType))
            {
                xamlType = new XamlNsReplacingType(type, this, localAssemblyName, realAssemblyName); 
                MasterTypeList.Add(type, xamlType);
            } 
            return xamlType; 
        }
 
        protected override XamlType GetXamlType(string xamlNamespace, string name, params XamlType[] typeArguments)
        {
            XamlType xamlType = base.GetXamlType(xamlNamespace, name, typeArguments);
            if (xamlType == null || xamlType.IsUnknown) 
            {
                xamlNamespace = XamlBuildTaskServices.UpdateClrNamespaceUriWithLocalAssembly(xamlNamespace, this.localAssemblyName, this.realAssemblyName); 
                xamlType = base.GetXamlType(xamlNamespace, name, typeArguments); 
            }
            return xamlType; 
        }
    }

    class XamlNsReplacingType : XamlType 
    {
        string localAssemblyName; 
        string realAssemblyName; 
        List namespaces;
 
        public XamlNsReplacingType(Type underlyingType, XamlSchemaContext context, string localAssemblyName, string realAssemblyName)
            : base(underlyingType, context)
        {
            this.localAssemblyName = localAssemblyName; 
            this.realAssemblyName = realAssemblyName;
            namespaces = null; 
        } 

        public override IList GetXamlNamespaces() 
        {
            if (namespaces == null)
            {
                namespaces = new List(); 
                IList originalNamespaces = base.GetXamlNamespaces();
 
                foreach (var ns in originalNamespaces) 
                {
                    namespaces.Add(XamlBuildTaskServices.UpdateClrNamespaceUriWithLocalAssembly(ns, this.localAssemblyName, this.realAssemblyName)); 
                }
            }
            return namespaces;
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK