我想從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. 如何覆蓋默認的nlog配置?
- 3. 如何覆蓋表單的默認值?
- 4. 如何覆蓋默認的file.separator?
- 5. 如何覆蓋默認的window.scrollTo函數?
- 6. WordPress的.htaccess覆蓋默認
- 7. 的fancybox 2默認覆蓋
- 8. 覆蓋TextBox.TextProperty的默認值
- 9. 用默認的覆蓋app.config
- 10. 覆蓋默認的jQuery css?
- 11. $ .ajax:如何覆蓋默認http標頭
- 12. 如何覆蓋默認鍵盤佈局?
- 13. 如何覆蓋默認呼叫屏幕?
- 14. 如何覆蓋「默認」導航欄?
- 15. 如何覆蓋Primefaces默認CSS?
- 16. 如何覆蓋GWT默認樣式clean.css?
- 17. 如何覆蓋默認方程?
- 18. 多租戶如何覆蓋默認值?
- 19. 如何覆蓋默認元素.styles
- 20. 如何覆蓋默認功能
- 21. 軌道 - 如何覆蓋默認視圖
- 22. 如何覆蓋默認表模型?
- 23. 如何覆蓋默認外鍵?
- 24. 如何覆蓋默認佈局
- 25. 如何用默認配置覆蓋CSS?
- 26. 如何覆蓋在JavaScript中的默認確認/ jquery
- 27. 覆蓋默認CSS屬性
- 28. Jquery覆蓋默認功能
- 29. 覆蓋SQL默認值(7)
- 30. Install4j:覆蓋默認回滾
你可以包裝ResourceManager而不是覆蓋它嗎? – Filip
是的,我可以。我想獲得的是自定義的ResourceManager.GetString(...)功能。 –
然後將它包裝在自定義類中,並在該類的GetString方法中執行所有額外的工作。 – Filip