Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / MS / Internal / Resources / ResourceManagerWrapper.cs / 1 / ResourceManagerWrapper.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // ResourceManagerWrapper is responsbile for getting resource // stream for a given Uri from : // // A. Right SatelliteAssembly for localizable resource. // B. Main assembly for non-localizable resource. // // History: // 06/16/2005: weibz, moved code from ResourceContainer // and change the functionality for this class. // //----------------------------------------------------------------------------- using System; using System.IO.Packaging; using System.IO; using System.Collections; using System.Windows.Resources; using System.Resources; using System.Reflection; using System.Globalization; using MS.Internal.PresentationCore; // SafeSecurityHelper using System.Windows; namespace MS.Internal.Resources { internal class ResourceManagerWrapper { // // Constructor // // Take an Assembly instance as input. // For a Uri which stands for resource in main application // assembly, this constructor will be called. // internal ResourceManagerWrapper(Assembly assembly) { _assembly = assembly; } #region Internal methods internal Stream GetStream(string name) { Stream stream = null; // // Try to search the resource from localizable resourceManager. // ResourceManager will do all the culture probe-and-fallback work. // try { stream = this.ResourceManager.GetStream(name, CultureInfo.CurrentUICulture); } catch (SystemException e) { bool bMissingResource; bMissingResource = (e is MissingManifestResourceException || e is MissingSatelliteAssemblyException); if (!bMissingResource) { throw; } // If it is missing Resource Manfifest exception, it is possible // the resource is in unlocalizable part. catch and eat the // exception here so that the code has chance to search the resource // from unlocalizable resource set part. } if (stream == null) { // Try to search the unlocalizable resource from Main assembly only. if (ResourceSet != null) { try { stream = this.ResourceSet.GetObject(name) as Stream; } catch (SystemException e) { if (!(e is MissingManifestResourceException)) { throw; } // Don't throw exception here. // If it doesn't return a valid stream, later code GetStreamCore in // ResourcePart will throw exception and let user know what happened // with more helpful information. // } } } return stream; } #endregion Internal methods #region Internal property internal Assembly Assembly { get { return _assembly; } set { _assembly = value; _resourceManager = null; _resourceSet = null; _resourceList = null; } } // // Readonly property // Return a list of resources available in this ResourceManagerWrapper. // It contains both localizable and unlocalizable resources. // internal IList ResourceList { get { if (_resourceList == null) { _resourceList = new ArrayList(); if (this.ResourceManager != null) { CultureInfo ciNeutral = GetNeutralResourcesLanguage(); // ResourceSet for neutral language contains all the available resources // in this ResourceManager. // // Set true to the second parameter, createIfNotExists, in GetResourceSet( ) // // This is to guarantee that API GetResourceSet( ) can always return ResourceSet // instance for the neutral language. // // If RM.GetObject or GetStream is called first, ResourceManager can create // ResourceSet instance for each cutlure and cache them in memory, so later // GetResourceSet( ) can return right instance no matter what value in second parm. // // But if GetObject/GetStream is not called first in user's code, and the second parm // is set to false, the resourceSet instance for the language is not available when // this API is called. Even though this API can get the Resource streams internally, // but it would NOT create instance of ResourceSet and return the object because // createIfNotExists is false. // ResourceSet rsLoc = this.ResourceManager.GetResourceSet(ciNeutral, true, false); if (rsLoc != null) { AddResourceNameToList(rsLoc, ref _resourceList); rsLoc.Close(); } } if (this.ResourceSet != null) { // This contains non-localizable resources in Main assembly. AddResourceNameToList(this.ResourceSet, ref _resourceList); } } return (IList)_resourceList; } } #endregion Internal property #region private methods // // Get Neutral Resource language for the assembly of this ResourceManagerWrapper // private CultureInfo GetNeutralResourcesLanguage( ) { // // If NeutralResourceLanguageAttribute is not set, the resource must be // in Main assembly, return CultureInfor.InvariantCulture. // CultureInfo ciNeutral = CultureInfo.InvariantCulture; NeutralResourcesLanguageAttribute neutralLangAttr = Attribute.GetCustomAttribute(_assembly, typeof(NeutralResourcesLanguageAttribute)) as NeutralResourcesLanguageAttribute; if (neutralLangAttr != null) { ciNeutral = new CultureInfo(neutralLangAttr.CultureName); } return ciNeutral; } // // Add all the availabe resource names in ResourceSet to ArrayList // private void AddResourceNameToList(ResourceSet rs, ref ArrayList resourceList) { IDictionaryEnumerator deResources; deResources = rs.GetEnumerator(); if (deResources != null) { while (deResources.MoveNext()) { string resName = deResources.Key as string; resourceList.Add(resName); } } } #endregion private methods #region private properties // // Get ResourceSet for non-localizable resources. // private ResourceSet ResourceSet { get { if (_resourceSet == null) { string manifestResourceName; manifestResourceName = SafeSecurityHelper.GetAssemblyPartialName(_assembly) + UnLocalizableResourceNameSuffix; ResourceManager manager = new ResourceManager(manifestResourceName, this._assembly); _resourceSet = manager.GetResourceSet(CultureInfo.InvariantCulture, true, false); } return _resourceSet; } } // // Get ResourceManger for the localizable resources. // private ResourceManager ResourceManager { get { if (_resourceManager == null) { string baseResourceName; // Our build system always generate a resource base name "$(AssemblyShortname).g" baseResourceName = SafeSecurityHelper.GetAssemblyPartialName(_assembly) + LocalizableResourceNameSuffix; _resourceManager = new ResourceManager(baseResourceName, this._assembly); } return _resourceManager; } } #endregion private properties #region private field private ResourceManager _resourceManager = null; // For localizable resources. private ResourceSet _resourceSet = null; // For non-localizable resources. private Assembly _assembly = null; private ArrayList _resourceList = null; private const string LocalizableResourceNameSuffix = ".g"; private const string UnLocalizableResourceNameSuffix = ".unlocalizable.g"; #endregion private field } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // ResourceManagerWrapper is responsbile for getting resource // stream for a given Uri from : // // A. Right SatelliteAssembly for localizable resource. // B. Main assembly for non-localizable resource. // // History: // 06/16/2005: weibz, moved code from ResourceContainer // and change the functionality for this class. // //----------------------------------------------------------------------------- using System; using System.IO.Packaging; using System.IO; using System.Collections; using System.Windows.Resources; using System.Resources; using System.Reflection; using System.Globalization; using MS.Internal.PresentationCore; // SafeSecurityHelper using System.Windows; namespace MS.Internal.Resources { internal class ResourceManagerWrapper { // // Constructor // // Take an Assembly instance as input. // For a Uri which stands for resource in main application // assembly, this constructor will be called. // internal ResourceManagerWrapper(Assembly assembly) { _assembly = assembly; } #region Internal methods internal Stream GetStream(string name) { Stream stream = null; // // Try to search the resource from localizable resourceManager. // ResourceManager will do all the culture probe-and-fallback work. // try { stream = this.ResourceManager.GetStream(name, CultureInfo.CurrentUICulture); } catch (SystemException e) { bool bMissingResource; bMissingResource = (e is MissingManifestResourceException || e is MissingSatelliteAssemblyException); if (!bMissingResource) { throw; } // If it is missing Resource Manfifest exception, it is possible // the resource is in unlocalizable part. catch and eat the // exception here so that the code has chance to search the resource // from unlocalizable resource set part. } if (stream == null) { // Try to search the unlocalizable resource from Main assembly only. if (ResourceSet != null) { try { stream = this.ResourceSet.GetObject(name) as Stream; } catch (SystemException e) { if (!(e is MissingManifestResourceException)) { throw; } // Don't throw exception here. // If it doesn't return a valid stream, later code GetStreamCore in // ResourcePart will throw exception and let user know what happened // with more helpful information. // } } } return stream; } #endregion Internal methods #region Internal property internal Assembly Assembly { get { return _assembly; } set { _assembly = value; _resourceManager = null; _resourceSet = null; _resourceList = null; } } // // Readonly property // Return a list of resources available in this ResourceManagerWrapper. // It contains both localizable and unlocalizable resources. // internal IList ResourceList { get { if (_resourceList == null) { _resourceList = new ArrayList(); if (this.ResourceManager != null) { CultureInfo ciNeutral = GetNeutralResourcesLanguage(); // ResourceSet for neutral language contains all the available resources // in this ResourceManager. // // Set true to the second parameter, createIfNotExists, in GetResourceSet( ) // // This is to guarantee that API GetResourceSet( ) can always return ResourceSet // instance for the neutral language. // // If RM.GetObject or GetStream is called first, ResourceManager can create // ResourceSet instance for each cutlure and cache them in memory, so later // GetResourceSet( ) can return right instance no matter what value in second parm. // // But if GetObject/GetStream is not called first in user's code, and the second parm // is set to false, the resourceSet instance for the language is not available when // this API is called. Even though this API can get the Resource streams internally, // but it would NOT create instance of ResourceSet and return the object because // createIfNotExists is false. // ResourceSet rsLoc = this.ResourceManager.GetResourceSet(ciNeutral, true, false); if (rsLoc != null) { AddResourceNameToList(rsLoc, ref _resourceList); rsLoc.Close(); } } if (this.ResourceSet != null) { // This contains non-localizable resources in Main assembly. AddResourceNameToList(this.ResourceSet, ref _resourceList); } } return (IList)_resourceList; } } #endregion Internal property #region private methods // // Get Neutral Resource language for the assembly of this ResourceManagerWrapper // private CultureInfo GetNeutralResourcesLanguage( ) { // // If NeutralResourceLanguageAttribute is not set, the resource must be // in Main assembly, return CultureInfor.InvariantCulture. // CultureInfo ciNeutral = CultureInfo.InvariantCulture; NeutralResourcesLanguageAttribute neutralLangAttr = Attribute.GetCustomAttribute(_assembly, typeof(NeutralResourcesLanguageAttribute)) as NeutralResourcesLanguageAttribute; if (neutralLangAttr != null) { ciNeutral = new CultureInfo(neutralLangAttr.CultureName); } return ciNeutral; } // // Add all the availabe resource names in ResourceSet to ArrayList // private void AddResourceNameToList(ResourceSet rs, ref ArrayList resourceList) { IDictionaryEnumerator deResources; deResources = rs.GetEnumerator(); if (deResources != null) { while (deResources.MoveNext()) { string resName = deResources.Key as string; resourceList.Add(resName); } } } #endregion private methods #region private properties // // Get ResourceSet for non-localizable resources. // private ResourceSet ResourceSet { get { if (_resourceSet == null) { string manifestResourceName; manifestResourceName = SafeSecurityHelper.GetAssemblyPartialName(_assembly) + UnLocalizableResourceNameSuffix; ResourceManager manager = new ResourceManager(manifestResourceName, this._assembly); _resourceSet = manager.GetResourceSet(CultureInfo.InvariantCulture, true, false); } return _resourceSet; } } // // Get ResourceManger for the localizable resources. // private ResourceManager ResourceManager { get { if (_resourceManager == null) { string baseResourceName; // Our build system always generate a resource base name "$(AssemblyShortname).g" baseResourceName = SafeSecurityHelper.GetAssemblyPartialName(_assembly) + LocalizableResourceNameSuffix; _resourceManager = new ResourceManager(baseResourceName, this._assembly); } return _resourceManager; } } #endregion private properties #region private field private ResourceManager _resourceManager = null; // For localizable resources. private ResourceSet _resourceSet = null; // For non-localizable resources. private Assembly _assembly = null; private ArrayList _resourceList = null; private const string LocalizableResourceNameSuffix = ".g"; private const string UnLocalizableResourceNameSuffix = ".unlocalizable.g"; #endregion private field } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Token.cs
- SetterBaseCollection.cs
- FilterElement.cs
- BitmapMetadataBlob.cs
- ProcessModuleCollection.cs
- ListManagerBindingsCollection.cs
- ObjectDataSourceFilteringEventArgs.cs
- WorkflowApplicationAbortedEventArgs.cs
- TransformerConfigurationWizardBase.cs
- SecurityElement.cs
- WebPartMinimizeVerb.cs
- WebPartUserCapability.cs
- DataGridPagerStyle.cs
- SafeNativeMethods.cs
- XmlDataImplementation.cs
- RightsManagementLicense.cs
- DelegatingTypeDescriptionProvider.cs
- SimpleBitVector32.cs
- XsltSettings.cs
- DataGridColumnFloatingHeader.cs
- IisTraceListener.cs
- MaterialCollection.cs
- AccessorTable.cs
- CompilationUnit.cs
- DbProviderConfigurationHandler.cs
- PkcsMisc.cs
- ClientScriptManagerWrapper.cs
- EventLogPermissionEntryCollection.cs
- ICollection.cs
- HostingEnvironmentSection.cs
- Button.cs
- DbConnectionClosed.cs
- StreamGeometry.cs
- ELinqQueryState.cs
- Triangle.cs
- PageCodeDomTreeGenerator.cs
- RelatedView.cs
- MLangCodePageEncoding.cs
- GridViewHeaderRowPresenter.cs
- SelectionWordBreaker.cs
- SQLByte.cs
- DynamicActionMessageFilter.cs
- DrawListViewSubItemEventArgs.cs
- FormViewUpdatedEventArgs.cs
- LabelExpression.cs
- RepeaterItemCollection.cs
- BitmapEffectDrawing.cs
- ButtonFieldBase.cs
- MouseWheelEventArgs.cs
- EncryptedKey.cs
- RadioButtonFlatAdapter.cs
- SiteMapHierarchicalDataSourceView.cs
- BinaryCommonClasses.cs
- CultureInfoConverter.cs
- LogoValidationException.cs
- ImageListStreamer.cs
- SqlRowUpdatedEvent.cs
- StringDictionaryCodeDomSerializer.cs
- DesignerOptionService.cs
- PermissionToken.cs
- StateMachineSubscription.cs
- TraceContextEventArgs.cs
- TextBoxAutoCompleteSourceConverter.cs
- GeneralTransform3DGroup.cs
- Point3DConverter.cs
- TraceListeners.cs
- ThreadSafeList.cs
- Pts.cs
- PeerMessageDispatcher.cs
- Drawing.cs
- Padding.cs
- IPCCacheManager.cs
- ProtectedProviderSettings.cs
- Main.cs
- BitmapMetadataBlob.cs
- CellConstant.cs
- mactripleDES.cs
- ProbeMatchesMessageCD1.cs
- SafeHandles.cs
- BidPrivateBase.cs
- SnapshotChangeTrackingStrategy.cs
- HandleExceptionArgs.cs
- AsmxEndpointPickerExtension.cs
- Rethrow.cs
- SelectingProviderEventArgs.cs
- RtfToXamlLexer.cs
- PriorityBindingExpression.cs
- _CacheStreams.cs
- ExpressionDumper.cs
- SafeTimerHandle.cs
- CustomPeerResolverService.cs
- InputMethodStateChangeEventArgs.cs
- Int32Collection.cs
- ObjectItemAssemblyLoader.cs
- ConstructorExpr.cs
- MemoryMappedViewStream.cs
- ConfigXmlAttribute.cs
- TextRangeEdit.cs
- ReturnType.cs
- MenuItemBindingCollection.cs