1

リソースとして多数の .CSV ファイルを持つプロジェクトがあります。これを「BASE」と呼びましょう。プロジェクトは、XXXXXXX が CSV ファイル名であるさまざまなメソッドで My.Resources.XXXXXXX への参照を作成します。「BASE」から派生したクラスに取り組んでおり、一部の .CSV ファイルを変更して、「BASE」プロジェクトにあるものを私のものに置き換えたいと考えています。「BASE」のリソースにあるファイルの代わりに、My.Resources.XXXXXX を呼び出すときに、ベース プロジェクトのメソッドで CSV ファイルを使用するようにしたいと考えています。それを行う方法に関するヒントはありますか?(任意の .NET 言語を歓迎します)

4

1 に答える 1

1

これは少しハッキーですが、うまく機能します:

派生クラスで:

Public Class MyApplication
    Inherits BaseApplication

    Private Shared Property ResourceManager As New MyResourceManager
    Shared Sub New()
        Const fieldName As String = "resourceMan"
        'set base resource manager to my specialized resource manager using reflection'
        ReflectionHelper.SetStaticFieldValue(ResourceManager.BaseResourceManagerType, fieldName, ResourceManager)
    End Sub

    ...
End Class

私のカスタム ResourceManager:

Public Class MyResourceManager
    Inherits ResourceManager

    Public Property BaseResourceManager As ResourceManager
    Public Property BaseResourceManagerType As Type
    Public Property MyResourceManager As ResourceManager = My.Resources.ResourceManager

    Public Sub New()
        MyBase.New()

        'get a reference to the resource manager for the base application to keep it around'
        Dim ass As Assembly = Assembly.Load("BaseApplication")
        BaseResourceManagerType = ass.GetType("BaseApplication.My.Resources.Resources")
        BaseResourceManager = ReflectionHelper.GetStaticPropertyValue(BaseResourceManagerType, "ResourceManager")
    End Sub

    Public Overrides Function GetString(ByVal name As String) As String
        Dim ret As String = MyResourceManager.GetString(name)
        If ret IsNot Nothing Then
            Return ret
        Else
            Return BaseResourceManager.GetString(name)
        End If
    End Function

    ... <override all the other members of ResourceManager in the same fashion as above>
End Class
于 2012-05-25T18:51:48.410 に答える