ProvideValueServiceProvider.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 / wpf / src / Framework / System / Windows / Markup / ProvideValueServiceProvider.cs / 1305600 / ProvideValueServiceProvider.cs

                            /****************************************************************************\ 
*
* File: ProvideValueServiceProvider.cs
*
*  ServiceProvider class that is passed into MarkupExtensions.ProvideValue method 
*  that understands the ParserContext.
* 
* Copyright (C) 2006 by Microsoft Corporation.  All rights reserved. 
*
\***************************************************************************/ 

using System;
using System.Windows;
using System.Windows.Media; 
using System.Diagnostics;
 
namespace System.Windows.Markup 
{
    ///  
    ///  Base class for all Xaml markup extensions.
    /// 

    internal class ProvideValueServiceProvider : IServiceProvider, IProvideValueTarget, IXamlTypeResolver, IUriContext, IFreezeFreezables 
    {
        // Construction 
 
        internal ProvideValueServiceProvider(ParserContext context)
        { 
            _context = context;
        }

        internal ProvideValueServiceProvider() 
        {
        } 
 
        // Set the TargetObject/Property (for use by IProvideValueTarget).
 
        internal void SetData(object targetObject, object targetProperty)
        {
            _targetObject = targetObject;
            _targetProperty = targetProperty; 
        }
 
        // Clear the TargetObject/Property (after a call to ProvideValue) 

        internal void ClearData() 
        {
            _targetObject = _targetProperty = null;
        }
 

        // IXamlTypeResolver implementation 
 
        Type IXamlTypeResolver.Resolve(string qualifiedTypeName) // E.g. foo:Class
        { 
            return _context.XamlTypeMapper.GetTypeFromBaseString(qualifiedTypeName, _context, true);
        }

        // IProvideValueTarget implementation 

        object IProvideValueTarget.TargetObject 
        { 
            get { return _targetObject; }
        } 
        object IProvideValueTarget.TargetProperty
        {
            get { return _targetProperty; }
        } 

        // IUriContext implementation 
 
        Uri IUriContext.BaseUri
        { 
            get { return _context.BaseUri; }
            set { throw new NotSupportedException(SR.Get(SRID.ParserProvideValueCantSetUri)); }
        }
 
        bool IFreezeFreezables.FreezeFreezables
        { 
            get 
            {
                return _context.FreezeFreezables; 
            }
        }

        bool IFreezeFreezables.TryFreeze(string value, Freezable freezable) 
        {
            return _context.TryCacheFreezable(value, freezable); 
        } 

        Freezable IFreezeFreezables.TryGetFreezable(string value) 
        {
            return _context.TryGetFreezable(value);
        }
 

        // IServiceProvider implementation (this is the way to get to the 
        // above interface implementations). 

        public object GetService(Type service) 
        {
            // IProvideValueTarget is the only implementation that
            // doesn't need the ParserContext
 
            if( service == typeof(IProvideValueTarget))
            { 
                return this as IProvideValueTarget; 
            }
 
            if( _context != null )
            {
                if( service == typeof(IXamlTypeResolver))
                { 
                    return this as IXamlTypeResolver;
                } 
 
                else if( service == typeof(IUriContext))
                { 
                    return this as IUriContext;
                }

                else if (service == typeof(IFreezeFreezables)) 
                {
                    return this as IFreezeFreezables; 
                } 
            }
 

            return null;

        } 

 
        // Data 

        private ParserContext _context = null; 
        private object _targetObject = null;
        private object _targetProperty = null;

 
    }
} 
 

// 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