- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的应用程序中,Resources.designer.cs
文件中有 1000 次静态属性的使用。例如:
Resources.string_to_identify_the_resource
我们也有自己的类,它查找资源,但也允许资源被其他程序集覆盖。如果我们的客户想要重命名插件或产品,这将很有用,因为我们只需放入一个 dll 即可完成。这个类的用法如下:
Resources.GetString("string_to_identify_the.resource");
我们希望通过我们自己的 Resources 类查找我们所有的资源,以便可以覆盖它们,而我的任务就是这样做。我不喜欢检查和重构所有代码。
我最初的想法是使用自定义 DynamicObject:
public class Resources
{
public static dynamic Dynamic = new StaticResourcesDynamicObject();
class StaticResourcesDynamicObject : DynamicObject
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = GetString(binder.Name);
return true;
}
}
// Existing code to lookup resources
public static string GetString(string name)
{
...
}
}
所以
Resources.string_to_identify_the_resource
将简单地重命名为:
Resources.Dynamic.string_to_identify_the_resource
主要问题是很多资源名称包含句点 (.
),因此它们与静态属性不匹配。例如 Cmd.Too_Much
有一个静态属性 Cmd_Too_Much
。
我可以尝试获取所有不同的可能性,或者其他人有解决问题的方法吗?
最佳答案
为此,您必须创建自定义代码生成器,因为 Visual Studio 会为您生成资源。生成的类是静态的、不可扩展的,并且非常紧密地耦合到与 Resx 一起工作的 .NET ResourceManager。
您可以通过创建自定义强类型资源生成器并在 Visual Studio 中替换它来更改此设置。 Visual Studio 使用 ResXFileCodeGenerator
和 PublicResXFileCodeGenerator
,或者您可以创建一个独立的工具来运行项目中的所有 Resx 文件并生成自定义的强类型资源类。
如果您想了解如何执行此操作,可以查看 Westwind.Globalization其中包括 StronglyTypedResources
为数据库资源(或 Resx)创建强类型类的类。您可以获取该代码并对其进行修改以生成执行您需要的自定义类。
也就是说,我认为动态不是您想要的。而是可以以实现您要执行的逻辑的方式创建 Getters。例如,我想确保如果未找到资源,则始终返回 something - 绝不会返回 null 或空白值。因此,如果缺少资源,我会返回总比没有好的资源 ID。
关于c# - 用 DynamicObject 替换静态资源属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587684/
我希望能够存储一个 Action 字典,并能够根据字典的键调用那些 Action 。如果未找到 key ,则不会调用任何操作。我有一个想法,即使用扩展 DynamicObject 的对象执行调用并在构
我有一个 DynamicObject 的子类,我想像 DO 的显式转换方法 TryConvert 一样实现原始类型的隐式转换;也就是说,无需编写多个隐式运算符 [type] 函数。 用法: dynam
假设我不能使用 ExpandoObject 并且必须自己滚动:- class MyObject : DynamicObject { dictionary _properties = dicti
这是从 DynamicObject 派生的 DynamicDataObject 类 public class DynamicDataObject : DynamicObject {
我有列表,其中 MyType:DynamicObject。 MyType 继承自 DynamicObject 的原因是我需要一个可以包含未知数量属性的类型。 在我需要过滤列表之前,一切正常。有没有办法
我知道 viewbag 是现成的 DynamicObject 之一,但是如果您不在 View 或 Controller 中,是否还有其他现成的 DynamicObject 除了自己写? (顺便说一句,
我正在实现一个通用函数来从任意提供的动态对象中提取一个值,但不知道如何调用 TryGetMember因为它需要 GetMemberBinder这是抽象的,因此我无法创建它。 样本... public
我正在试验 C# 4.0 的动态对象模型。 我创建了一个名为“Block”的抽象类,它继承自 DynamicObject。它覆盖 TryGetMember 和 TrySetMember。 此外,我创建
假设我有一个继承自 DynamicObject 的类: public class DynamicBase : DynamicObject { public override bool TryGe
在我们的应用程序中,Resources.designer.cs 文件中有 1000 次静态属性的使用。例如: Resources.string_to_identify_the_resource 我们也
我正在编写一个 Javascript C# 桥并遇到了以下问题: 有一个 JSObject 类: public class JSObject : DynamicObject { public
我有一个派生自 DynamicObject 类的类。在调用 JsonConvert.SertializeObject 时,没有任何动态属性被序列化。 类定义为, public clas
现在我有一个扩展 DynamicObject 并覆盖 TryGetMember 的类。 public class FieldCollection : DynamicObject, ICollectio
在 DynamicObject 的文档中,有一个 DynamicDictionary 的示例,它允许您像使用具有属性的类一样使用字典。 这是类(为简洁起见略作修改): public class Dyn
我正在阅读 this关于C# 4.0 中的动态对象的文章。 在该示例中,函数 TryGetMember(GetMemberBinder binder, out object result) 的第二个参
我已成功将事件处理程序添加到我的动态对象中。但是,我无法删除它们。 dynamic d = new MyDynamicObject(); d.MyEvent += new EventHandler(t
我正在尝试设计一个执行提取转换加载操作的过程。我想在我的管道中使用 ExpandoObject 以允许我轻松地将列添加到我的数据流中。基本上,我从某种数据源读取数据,将其转换为动态数据,然后将其返回到
通常,当您覆盖/实现 bool TryDoSomething(...) 方法时,如果它不起作用,您将返回 false。 在 DynamicObject 的情况下,我们返回 false 并且它抛出一个仅
是否可以确定动态成员访问期望的类型?我试过了 dynamic foo = new MyDynamicObject(); int x = foo.IntValue; int y = (int)foo.I
我正在尝试构建一个能够处理通用方法调用的 DynamicObject,但似乎需要的 API - 尽管存在于 RC versions of 4.0 Framework 中- 已在 RTM 中标记为内部(
我是一名优秀的程序员,十分优秀!