IResourceProvider.ResourceReader 属性   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个对象,以便从资源文件中读取资源值。
public:
 property System::Resources::IResourceReader ^ ResourceReader { System::Resources::IResourceReader ^ get(); };public System.Resources.IResourceReader ResourceReader { get; }member this.ResourceReader : System.Resources.IResourceReaderPublic ReadOnly Property ResourceReader As IResourceReader属性值
与当前资源提供程序关联的 IResourceReader。
示例
下面的代码示例演示检索缓存值的自定义资源提供程序工厂。 资源提供程序工厂创建实现 IResourceProvider的自定义资源提供程序的实例。 资源提供程序包括自定义 ResourceReader 属性。
[
    DesignTimeResourceProviderFactoryAttribute(
        typeof(CustomDesignTimeResourceProviderFactory))
]
public class CustomResourceProviderFactory : ResourceProviderFactory
{
    public override IResourceProvider
      CreateGlobalResourceProvider(string classname)
    {
        return new CustomResourceProvider(null, classname);
    }
    public override IResourceProvider
      CreateLocalResourceProvider(string virtualPath)
    {
        return new CustomResourceProvider(virtualPath, null);
    }
}
// Define the resource provider for global and local resources.
internal class CustomResourceProvider : IResourceProvider
{
    string _virtualPath;
    string _className;
    public CustomResourceProvider(string virtualPath, string classname)
    {
        _virtualPath = virtualPath;
        _className = classname;
    }
    private IDictionary GetResourceCache(string culturename)
    {
        return (IDictionary)
            System.Web.HttpContext.Current.Cache[culturename];
    }
    object IResourceProvider.GetObject
        (string resourceKey, CultureInfo culture)
    {
        object value;
        string cultureName = null;
        if (culture != null)
        {
            cultureName = culture.Name;
        }
        else
        {
            cultureName = CultureInfo.CurrentUICulture.Name;
        }
        value = GetResourceCache(cultureName)[resourceKey];
        value ??= GetResourceCache(null)[resourceKey];
        return value;
    }
    IResourceReader IResourceProvider.ResourceReader
    {
        get
        {
            string cultureName = null;
            CultureInfo currentUICulture = CultureInfo.CurrentUICulture;
            if (!String.Equals(currentUICulture.Name,
                CultureInfo.InstalledUICulture.Name))
            {
                cultureName = currentUICulture.Name;
            }
            return new CustomResourceReader
                (GetResourceCache(cultureName));
        }
    }
}
internal sealed class CustomResourceReader : IResourceReader
{
    private IDictionary _resources;
    public CustomResourceReader(IDictionary resources)
    {
        _resources = resources;
    }
    IDictionaryEnumerator IResourceReader.GetEnumerator()
    {
        return _resources.GetEnumerator();
    }
    void IResourceReader.Close() { }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return _resources.GetEnumerator();
    }
    void IDisposable.Dispose() { return; }
}
<DesignTimeResourceProviderFactoryAttribute(GetType(CustomDesignTimeResourceProviderFactory))> _
Public Class CustomResourceProviderFactory
    Inherits ResourceProviderFactory
    Public Overrides Function CreateGlobalResourceProvider(ByVal classname As String) As IResourceProvider
        Return New CustomResourceProvider(Nothing, classname)
    End Function
    Public Overrides Function CreateLocalResourceProvider(ByVal virtualPath As String) As IResourceProvider
        Return New CustomResourceProvider(virtualPath, Nothing)
    End Function
End Class
' Define the resource provider for global and local resources.
Friend Class CustomResourceProvider
    Implements IResourceProvider
    Dim _virtualPath As String
    Dim _className As String
    Public Sub New(ByVal virtualPath As String, ByVal classname As String)
        _virtualPath = virtualPath
        _className = classname
    End Sub
    Private Function GetResourceCache(ByVal culturename As String) As IDictionary
        Return System.Web.HttpContext.Current.Cache(culturename)
    End Function
    Function GetObject(ByVal resourceKey As String, ByVal culture As CultureInfo) As Object Implements IResourceProvider.GetObject
        Dim value As Object
        Dim cultureName As String
        cultureName = Nothing
        If (IsNothing(culture)) Then
            cultureName = CultureInfo.CurrentUICulture.Name
        Else
            cultureName = culture.Name
        End If
        value = GetResourceCache(cultureName)(resourceKey)
        If (value = Nothing) Then
            value = GetResourceCache(Nothing)(resourceKey)
        End If
        Return value
    End Function
    ReadOnly Property ResourceReader() As IResourceReader Implements IResourceProvider.ResourceReader
        Get
            Dim cultureName As String
            Dim currentUICulture As CultureInfo
            cultureName = Nothing
            currentUICulture = CultureInfo.CurrentUICulture
            If (Not (String.Equals(currentUICulture.Name, CultureInfo.InstalledUICulture.Name))) Then
                cultureName = currentUICulture.Name
            End If
            Return New CustomResourceReader(GetResourceCache(cultureName))
        End Get
    End Property
End Class
Friend NotInheritable Class CustomResourceReader
    Implements IResourceReader
    Private _resources As IDictionary
    Public Sub New(ByVal resources As IDictionary)
        _resources = resources
    End Sub
    Function GetEnumerator1() As IDictionaryEnumerator Implements IResourceReader.GetEnumerator
        Return _resources.GetEnumerator()
    End Function
    Sub Close() Implements IResourceReader.Close
    End Sub
    Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
        Return _resources.GetEnumerator()
    End Function
    Sub Dispose() Implements IDisposable.Dispose
    End Sub
End Class
注解
对象 IResourceReader 从源读取顺序名称/值对。 这些 ResourceReader 和 ResXResourceReader 类分别提供用于从 .resources 和 .resx 文件读取的默认 IResourceReader 接口实现。 接口的其他实现 IResourceProvider 可以从包含资源值的任何源读取。