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