这是可插拔组件本地化的好解决方案吗?

2024-05-02

我问了一个question https://stackoverflow.com/questions/1504363/how-should-i-localise-pluggable-components以前只有一个答案。我现在已经花了一些时间来研究这个并制定了计划,但希望得到一些反馈来确定这是否是一个好主意。

问题:

我想要一个具有名称(不变,用于标识组件)的组件在使用它的应用程序中本地化其名称,而不用 DisplayName 属性污染组件的模型。该组件可能存在于单独的 dll 中并在运行时动态加载。

我的感觉是组件 dll 应该负责提供本地化名称(这似乎是很好的封装),但是使用该组件的应用程序应该负责获取/使用本地化名称(事实上,该组件具有不同的名称)显示目的不是组件的问题,而是使用该组件的“视图”的问题)

解决方案:

将一个资源添加到组件 dll 中,其名称与组件类所在的文件相同。将一个字符串添加到资源中,其键是组件的名称。

在应用程序中获取本地化名称,如下所示:

ExternalObject obj = GetExternalObject ();            
ResourceManager manager = new ResourceManager (obj.GetType ());
string localisedName= manager.GetString (obj.Name);

该代码可能会封装在 Localiser 类中,但传达了要点。这似乎可行,但这是一个好主意,还是有更好/更标准的方法来做到这一点?

编辑:我应该指出,我对该解决方案不确定的一件事是资源必须位于与类所在文件同名的 .resx 文件中。这使得它可以工作,因为可以从类型名称来识别资源文件。这与表单本地化似乎起作用相同,并且使 Visual Studio 将 .resx 作为 .cs 文件的“子组件”,这一切看起来都很好。但是,如果我尝试编辑此文件,Visual Studio 会发出警告(关于编辑属于另一个项目项的资源),这让我认为也许还有其他方法可以做到这一点。


我认为你的想法是正确的,但有更好的方法来实现这一点。

据推测,您有一个可插入组件实现的接口。比如说,IPluggable:

interface IPluggable {
    ...
    string LocalizedName {get;}
    ...
}

从您的主二进制文件中,加载可插入程序集并使用反射创建 IPluggable 实例(我认为这就是GetExternalObject()你有的方法),然后使用访问本地化名称LocalizedName财产。InsideIPluggable 实现,创建一个ResourceManager并访问LocalizedName来自该可插拔组件的 resx。

您所做的就是在可插拔程序集中很好地封装行为 - 它负责为您提供本地化名称,但是它选择这样做,而不需要您的 man 程序假设ResourceManager可以创建访问本地化名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是可插拔组件本地化的好解决方案吗? 的相关文章

  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • Autofac 无法解析构造函数的参数“System.String applicationClientId”

    我有以下类 接口结构 class ProviderSetting public delegate ProviderSetting Factory string applicationClientId string appKey public
  • 如何将 SyndicateElementExtension 添加到 SyndicateItem

    使用 NET System ServiceModel Syndicate 类 我想向 SyndicateItem 添加一个新的 SyndicateElementExtension 它将导出以下 XML
  • 大学软件开发:从 Datatel/Colleague 获取数据

    我在北卡罗来纳州的一所社区大学工作 我们最核心的数据存储库是一个名为 Datatel 的软件系统 又名 Colleague 为什么它有两个名字 我不知道 在我们的例子中 底层数据存储是 IBM Unidata 我使用 net 技术进行开发
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • Azure CloudTable 线程安全吗?

    我正在使用 Storage SDK 2 0 从不同线程 ASP NET 应用程序 写入 Azure 表存储 Is 云表 object 线程安全 我是否可以仅初始化 CloudStorageAccount CloudTableClient 和
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 如何禁用 Alt + F4 关闭表单?

    What is the best way to disable Alt F4 in a c win form to prevent the user from closing the form 我使用表单作为弹出对话框来显示进度条 但我不希
  • 如何在 C# 中向类、方法、属性等添加文档工具提示?

    不确定我的说法是否正确 但我想开始向我的类 方法 属性等添加一些文档 我know这可能是非常明显的 但我从未真正学会过 我不知道从哪里开始 只是为了澄清 每当您滚动某个类 或方法 属性等 时 它都会在 Visual Studio 中显示一个
  • 如何完全禁用签名程序集?

    我有一个包含多个项目的 VS NET 2010 解决方案 我刚刚添加了一个新的库项目 the library assembly 启动项目是一个网站 当我运行该网站时 出现以下错误 无法加载文件或程序集 the library assembl
  • 两个 RichTextBox 具有相同的滚动条

    是否有任何可用的第三方工具有两个富文本框 但两者只有一个共享滚动条 我需要用两种不同的语言实现一些文本 但两个文本框应该同时滚动 public enum ScrollBarType uint SbHorz 0 SbVert 1 SbCtl
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • 处理双 NaN 和 Inf 时的 ILASM 问题

    我创建了一个简单的程序 并初始化了双精度类型值 var a double NaN 我使用 Visual Studio 2019 net Framework 4 5 构建项目 并使用 ILDASM exe 版本 4 0 30319 0 将其反
  • 生成逗号分隔值

    假设我有一个字符串集合 foo bar xyz 我想从列表中生成一个逗号分隔的值 如下所示 foo bar xyz 请注意末尾缺少 我知道有多种方法可以生成此内容 使用 for 循环和 string Format 或 StringBuild
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了

随机推荐

  • java堆空间OutOfMemoryError分析工具

    我正在得到一个OutOfMemoryError Java heap space 我可以使用任何工具来查找根本原因吗 您可以使用一些分析工具 例如 eclipse mat 分析应用程序的堆转储 以查看哪些内容消耗了多少堆 但首先您需要获取应用
  • 如何选择不同级别的多个节点?

    拥有这个 简化的 XML
  • Visual Studio 2017 无法安装多个组件

    Visual Studio 2017 社区版发行版的安装程序因多个组件而失败 由于以下原因 产品无法安装列出的工作负载和组件 一个或多个包失败 工作负载不完整 使用 NET进行移动开发 Microsoft VisualStudio Work
  • C++:错误:限定名称的使用无效

    更新 我认为它已经修复了 多谢你们 我收到错误 但我无法弄清楚 我有这个代码 A Structure with one variable and a constructor struct Structure public int dataM
  • 设置背景时按钮变大 - 如何使其变小

    我想让我的按钮在设置背景之前缩小或恢复正常 我知道使用背景色调可以使用相同的背景颜色来解决此问题 但我的问题是我在背景上使用选择器 当选择器设置为按钮背景时 它变得更宽 当我将背景切换为背景色调时 颜色变得不同 例如对我来说是紫色 并且按下
  • 如何在 ActiveAdmin 中正确配置 Rails 4.1 枚举

    我有一个 Rails 4 1 应用程序 其中使用枚举来表示对象的隐私级别 在我的架构中 t integer privacy level default 0 在我的模型中 enum privacy level privacy private
  • 从 SQL 表在 SQL 中创建数据透视视图

    我有下表TEMP 我想使用 SQL 创建一个数据透视视图 排序依据CATEGORYASC 通过LEVEL降序和SETASC 并填写value 预期输出 我已尝试以下代码 但无法解决引发错误的聚合部分 SELECT FROM SELECT S
  • 自动化 Windows UI 测试方法

    我们正在寻求设置自动化 UI 测试 并想知道最好的方法是什么 潜在的陷阱是什么 设置费用是否昂贵 提前致谢 B 自动化测试最大的消耗可能是时间 有很多非常昂贵的工具 但也有免费的工具 即使是昂贵的工具的成本也不太可能与正确设置自动化测试所需
  • 如何处理Spring Boot中的SQLIntegrityConstraintViolationException?

    我正在 RestController 工作 尝试使用 try catch 块处理 SQLIntegrityConstraintViolationException 但我不知道为什么 catch 块从未执行 这是休息控制器 import ja
  • 使用 socket.io node.js 和传入消息的通知系统的架构实现和设计

    免责声明 我之前没有使用过node js 我以前没有使用过socket io 我正在考虑实现 Google Plus Facebook StackOverflow 风格的通知系统 我不是一个没有经验的开发人员 最终我会解决这个问题 但我只是
  • 增加android中的网格间距

    我有一个网格视图 其中三列中有很多项目 我想增加它们之间的间距 我怎样才能在安卓中做到这一点 您可以使用android verticalSpacing and android horizontalSpacing在 GridView 标记中并
  • Letrec 和可重入延续

    有人告诉我 以下表达式的计算结果为 0 但许多方案的实现将其计算为 1 let cont f letrec x call with current continuation lambda c set cont c 0 y call with
  • makefile 中的 $< 和 $@ 是什么意思?

    I have a csv b csv 在我的docs csv目录中 我需要将每个文件转换为 json 文件 我遵循这个question https stackoverflow com questions 2706064 compile al
  • 以与文件大小相同的格式获取类或对象的大小?

    如何从内存中最好地确定类的大小 这是一个可以使用的基本示例类 请注意 这些变量除了用于示例之外没有其他用途 type TMyClass class public fString1 string fString2 string fIntege
  • ReactJS Mapbox-gl 无效类型:“容器”必须是字符串或 HTMLElement

    我正在使用 ReactJS 和 Mapbox GL JS 构建一个小型应用程序 const MapRender gt const mapContainerRef useRef null const map new mapboxgl Map
  • Android 库模块使用 proguard

    我想创建一个安全的库模块 没有人可以从 apk 文件中提取代码 但是当尝试在库 gradle 中启用 proguard 时 出现错误包不存在 然后我在 proguard 规则文件中添加以下行 keep class com alprocr k
  • 升级到v1.5时jquery ajax出错

    我从 v1 4 4 升级到 v1 5 我想我已经发现了下面的问题 document ready function Get token on page load update csrf token 该函数看起来像这样 EDITED funct
  • Dynamics CRM:在帐户实体中添加多个地址

    I have a scenario where I need to add multiple Address to Account I am using Dynamics 365 online instance and my current
  • 使用 REST API 进行正确的会话管理

    我已经完成了 RESTful API 的设计 其中我使用作为参数发送的 API 令牌对每个请求进行身份验证 现在我想创建一个客户端界面 我想知道什么是管理每个客户端的会话的正确安全方法browser客户 我想过一个流程来保持服务器端无状态
  • 这是可插拔组件本地化的好解决方案吗?

    我问了一个question https stackoverflow com questions 1504363 how should i localise pluggable components以前只有一个答案 我现在已经花了一些时间来研