我想从Resources.Designer.cs
文件中覆盖System.Resources.ResourceManager
以实现自定义的ResourceManager.GetString(...)方法功能。这可能吗?如何覆盖Resources.Designer.cs中的默认System.Resources.ResourceManager?
回答
我相信你在这里问两个单独的问题。你当然可以覆盖ResourceManager.GetString
。但是,您不能在自动生成的Resource.Designer.cs
代码中使用该覆盖。要使用它,你必须编写你自己的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);
}
}
}
这并不意味着完整,但它缺少一个'class'关键字。请尽量让你的批评具有建设性。 – Kjata30
我创建了一个CustomResourceManager
,它覆盖GetString()
调用像这样:
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
}
}
然后我在生成加入了预生成步骤,我的项目替换System.Resources.ResourceManager
的创建与我CustomResourceManager
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"
我们走吧!
只要从代码中使用资源,这很好用。当使用剃刀视图中的资源时,似乎使用了原始生成的版本,而不是编译的“已修改”版本。任何想法? – laureysruben
自定义资源管理器正在从视图中为我调用。你的观点是什么样子?我的示例如下所示: '@using My.Namespace.Resources' [new line] '
@ Resource.Foo
' – djs这似乎正是我们正在做的,但它仍然不起作用。当我们检查视图中的资源指向的位置是在这个App_GlobalResources.gecvukmg.dll中,而不是在设计器代码文件中。 因此,似乎在编译的App_GlobalResources.gecvukmg.dll中未使用生成的(并且被操纵的)设计器代码文件。 – laureysruben
- 1. 覆盖默认值
- 2. 如何覆盖表单的默认值?
- 3. 如何覆盖默认的nlog配置?
- 4. 如何覆盖默认的window.scrollTo函数?
- 5. 覆盖TextBox.TextProperty的默认值
- 6. 用默认的覆盖app.config
- 7. 覆盖默认的jQuery css?
- 8. 如何覆盖默认呼叫屏幕?
- 9. 如何覆盖默认键盘布局?
- 10. 如何覆盖默认布局
- 11. 如何覆盖“默认”导航栏?
- 12. 如何用默认配置覆盖CSS?
- 13. 轨道 - 如何覆盖默认视图
- 14. 如何覆盖默认元素.styles
- 15. 如何覆盖默认功能
- 16. 如何覆盖在JavaScript中的默认确认/ jquery
- 17. Jquery覆盖默认定位
- 18. 覆盖JComboBox默认颜色
- 19. 覆盖默认img css
- 20. Emacs Elisp覆盖默认值
- 21. 覆盖DS默认布局
- 22. 保护“默认”,从覆盖
- 23. Install4j:覆盖默认回滚
- 24. UIAlertController - 默认覆盖ActionSheet?
- 25. 覆盖默认构造
- 26. Django覆盖默认功能
- 27. 覆盖Xamarin默认样式
- 28. 提取zip默认覆盖?
- 29. 覆盖Silverlight 4中的默认ItemsPanelTemplate?
- 30. 覆盖JTextPane中TAB的默认行为
你可以包装ResourceManager而不是覆盖它吗? – Filip
是的,我可以。我想获得的是自定义的ResourceManager.GetString(...)功能。 –
然后将它包装在自定义类中,并在该类的GetString方法中执行所有额外的工作。 – Filip