Desidero sovrascrivere System.Resources.ResourceManager
dal file Resources.Designer.cs
per ottenere la funzionalità del metodo ResourceManager.GetString (...) personalizzato. È possibile?Come eseguire l'override di default System.Resources.ResourceManager in Resources.Designer.cs?
risposta
Credo che stai facendo due domande separate qui. Puoi certamente ignorare lo ResourceManager.GetString
. Tuttavia, non è possibile utilizzare tale override nel codice Resource.Designer.cs
generato automaticamente. Per utilizzarlo, dovrai scrivere la tua classe di designer Resource
.
public class MyResourceManager : System.Resources.ResourceManager
{
// override
public override GetString(string name)
{
// custom code
}
}
public class MyResourceDesigner
{
// use your custom class with override
private static MyResourceManager resourceManager;
private static CultureInfo resourceCulture;
public static MyResourceManager ResourceManager
{
if (object.ReferenceEquals(resourceManager, null))
{
// Resource is just the name of the .resx file
// be sure to include relevant namespaces
var temp = new MyResourceManager(
"MyProject.Resource",
typeof(MyResourceDesigner).Assembly);
resourceManager = temp;
}
return resourceManager;
}
public static CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
// start adding strongly-typed objects
public static string Foo
{
get
{
// use your override
return ResourceManager.GetString("Foo", resourceCulture);
}
}
}
Non è pensato per essere completo, anche se manca una parola chiave 'class'. Cerca di rendere le tue critiche costruttive, per favore. – Kjata30
ho creato un CustomResourceManager
che sostituisce le GetString()
chiamate in questo modo:
public class CustomResourceManager : ResourceManager
{
public CustomResourceManager(Type resourceSource)
:base(resourceSource)
{
}
public CustomResourceManager(string baseName, Assembly assembly)
: base(baseName, assembly)
{
}
public CustomResourceManager(string baseName, Assembly assembly, Type usingResourceSet)
: base(baseName, assembly, usingResourceSet)
{
}
public override string GetString(string name)
{
// your business logic
}
public override string GetString(string name, CultureInfo culture)
{
// your business logic
}
}
poi ho aggiunto una fase di pre-build per il mio progetto per sostituire la creazione di un System.Resources.ResourceManager
con la mia CustomResourceManager
nel generato Resource.Designer.cs
file:
powershell -command "(gc ..\Resources\Resource.Designer.cs).Replace(\"new global::System.Resources.ResourceManager\", \"new CustomResourceManager\") | set-content ..\Resources\Resource.Designer.cs -Encoding UTF8"
E via!
Funziona alla grande, purché le risorse vengano utilizzate dal codice. Quando si utilizzano le risorse dalle visualizzazioni del rasoio, sembra che venga utilizzata la versione generata originale invece della versione "adattata" che è stata compilata. Qualche idea? – laureysruben
Il gestore risorse personalizzato viene chiamato dalla vista per me. Che aspetto ha la tua vista? Il mio esempio assomiglia a questo: '@using My.Namespace.Resources' [nuova riga] '
@ Resource.Foo
' – djsQuesto sembra essere esattamente quello che stiamo facendo, ma ancora non funziona. Quando controlliamo dove le risorse nella vista puntano finiamo in questo App_GlobalResources.gecvukmg.dll e non nel file di codice del designer. Quindi sembra che il file di codice di progettazione generato (e manipolato) non sia utilizzato nella App_GlobalResources.gecvukmg.dll compilata utilizzata dalla vista. – laureysruben
- 1. resources.designer.cs non sta generando automaticamente. (Principiante di MonoDevelop)
- 2. Default di stub in Mockito
- 3. Posso eseguire una procedura con parametri null di default?
- 4. Come ottenere la shell di default
- 5. Come cambiare l'estetica di default in ggplot?
- 6. argomenti di default VM in Eclipse: -javaagent
- 7. parametri di default in C++
- 8. Naso: Come saltare i test di default?
- 9. Come mostrare ionicPopover di default
- 10. Return system.time di default
- 11. Salta il plug-in maven2 di default
- 12. argomenti di default rimossi in gtk3?
- 13. remove Default in migration?
- 14. Analizzatore di indici di default in elasticsearch
- 15. C# parametri di default
- 16. Come cambiare l'immagine di homeAsUpIndicator in tema di default Theme.Holo.Light
- 17. rilevato errore di default in R
- 18. Come interrogare namespace di default con MSXML
- 19. funzione PHP come parametri di default
- 20. Cambia l'icona di default
- 21. Lambda come argomento di default non riesce
- 22. come saltare gli argomenti di default C++?
- 23. Esiste un modo semplice per eseguire il default fuori dai limiti in Seq nidificati in Scala?
- 24. I valori di default in serie
- 25. Differenza tra null default null e default null in mysql?
- 26. default Tipo di raccolta
- 27. rimuovere jar creato di default in Maven
- 28. compito di default per namespace in Rake
- 29. caso di default di classe metodo
- 30. Fa pytest markers "default"?
È possibile avvolgere ResourceManager invece di sovrascriverlo? – Filip
Sì, posso. Tutto quello che voglio ottenere è la funzionalità personalizzata di ResourceManager.GetString (...). –
Quindi basta avvolgerlo in una classe personalizzata e fare tutto il lavoro extra nel metodo GetString di quella classe. – Filip