Quiero sobrescribir System.Resources.ResourceManager
del archivo Resources.Designer.cs
para lograr la funcionalidad del método ResourceManager.GetString (...) personalizada. es posible?¿Cómo sobrescribir System.Resources.ResourceManager predeterminado en Resources.Designer.cs?
Respuesta
Creo que estás haciendo dos preguntas por separado aquí. Sin duda puede anular ResourceManager.GetString
. Sin embargo, no puede usar esa anulación en el código autogenerado Resource.Designer.cs
. Para usarlo, tendrá que escribir su propia clase de diseñador 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);
}
}
}
No está destinado a ser completo, aunque le falta una palabra clave 'clase'. Intente hacer su crítica constructiva, por favor. – Kjata30
he creado un CustomResourceManager
que anula los GetString()
llamadas así:
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
}
}
Luego añade una etapa de pre-construcción de mi proyecto para reemplazar la creación de un System.Resources.ResourceManager
con mi CustomResourceManager
en el generada 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"
Y vamos, vamos!
Esto funciona muy bien, siempre que los recursos se utilicen desde el código. Al usar recursos de vistas de maquinilla de afeitar parece que se está utilizando la versión generada original en lugar de la versión "adaptada" que se compila. ¿Alguna idea? – laureysruben
El administrador de recursos personalizado se llama desde la vista por mí. ¿Cómo se ve tu vista? Mi ejemplo se ve así: '@using My.Namespace.Resources' [línea nueva] '
@ Resource.Foo
' – djsEso parece ser exactamente lo que estamos haciendo, pero todavía no funciona. Cuando verificamos dónde apuntan los recursos en la vista, terminamos en este App_GlobalResources.gecvukmg.dll y no en el archivo de código del diseñador. Parece que el archivo de código de diseñador generado (y manipulado) no se usa en el App_GlobalResources.gecvukmg.dll compilado utilizado por la Vista. – laureysruben
- 1. cómo sobrescribir el título predeterminado con título personalizado en android
- 2. ¿Cómo sobrescribir la funcionalidad window.open?
- 3. ¿Cómo sobrescribir register_argc_argv en PHP?
- 4. resources.designer.cs no se autogenera. (MonoDevelop beginner)
- 5. ¿Debería Resources.Designer.cs estar bajo control de fuente?
- 6. ¿Cómo sobrescribir el campo de modelo de usuario predeterminado en Django?
- 7. Cómo sobrescribir archivos existentes usando Rubyzip lib
- 8. Cómo sobrescribir td align = "center"?
- 9. EntityFramework cómo sobrescribir las propiedades
- 10. Cómo sobrescribir OnClick en Android Spinner?
- 11. Cómo sobrescribir la salida estándar en C
- 12. Cómo sobrescribir una entidad en Symfony2 paquete
- 13. ¿Cómo sobrescribir la propiedad en Ant?
- 14. cómo sobrescribir datos en un archivo txt?
- 15. ¿Cómo sobrescribir toString() correctamente en Java?
- 16. cómo sobrescribir/usar cookies en scrapy
- 17. Cómo sobrescribir copiar y pegar en richtextbox
- 18. ¿Cómo sobrescribir una aplicación en Django correctamente?
- 19. ¿Cómo sobrescribir los archivos existentes en lote?
- 20. Windows: Sobrescribir archivo en uso
- 21. ¿Cómo obtengo VS2010 para generar Resources.Designer.cs con un constructor público en lugar de interno?
- 22. Sobrescribir propiedad usando Python
- 23. ¿Cómo sobrescribir la operación de cierre de ventana predeterminada?
- 24. Sobrescribir auto_now para unittest
- 25. Sobrescribir el comportamiento predeterminado de las etiquetas de anclaje usando jquery
- 26. ¿Cómo sobrescribir log4j.properties durante la prueba?
- 27. Rieles: cómo sobrescribir: método de destrucción?
- 28. ¿Cómo puedo sobrescribir la plantilla @ Html.LabelFor?
- 29. violín: cómo deshabilitar sobrescribir Header Host
- 30. cómo realizar boost :: filesystem copy_file con sobrescribir
¿Se puede ajustar ResourceManager en lugar de anularlo? – Filip
Sí puedo. Todo lo que quiero obtener es la funcionalidad personalizada ResourceManager.GetString (...). –
Luego simplemente envuélvalo en clase personalizada y haga todo el trabajo adicional en el método GetString de esa clase. – Filip