C#根据需要导入不同的库
C# importing different libraries depending on need
我正在使用 Nunit 在 Selenium 中进行单元测试(以防万一)。
对于这个单元测试,我有一些库包含所有选项的不同语言翻译。
每个库都有一个 class 命名相同的东西,有大量的字符串都具有相同的名称,只是其中的字符串不同。
+
我有一个配置文件,您可以在其中选择要 运行 测试的语言。是否有一种聪明的方法来加载所需的语言库,以便我可以对字符串使用相同的变量?
在 JavaScript 中我可以使用 require(string)。由于输入是一个字符串,我可以使用一个变量来更改使用的实际文件,但将变量命名为相同的名称。
您可以将 json 用作已翻译字符串的存储空间,而不是 class 文件
[{
"Reference": "Hello World",
"French": "Bonjour le monde",
"Japanese": "Harōwārudo"
}]
然后就可以创建DTO了。
public class OptionsTranslation
{
public string Reference { get; set; }
public string French { get; set; }
public string Japanese { get; set; }
}
你只需将 json 反序列化为对象,然后检索值
var options = JsonConvert.DeserializeObject<List<OptionsTranslation>>(File.ReadAllText(<jsonFilepath>));
var frenchOption = options.First(x=> x.Reference.Equals("Hello World").French;
希望对您有所帮助。
您可以使用反射根据配置文件中的值查找相应的程序集,然后新建一个库实例class。
像这样:
string typeString = "My.Assembly.Namesapce.MyClass, My.Assembly.Namesapce, Version=4.0.0.0, Culture=neutral, PublicKeyToken=84474dc3c6524430";
// Get a reference to the type.
Type theType = Type.GetType(typeString, true, false);
// Create an instance of that type.
MyClass theInstance = (MyClass)Activator.CreateInstance(theType);
在这种情况下,您需要更改 typeString
取决于您在配置文件中选择的语言
或者,动态依赖注入似乎可以很好地解决您的问题。这个想法是,您注册可以在您的情况下注入的多种类型语言库。然后在运行时,您可以根据您设置的条件注入正确的库。
这是在 .Net Core 中实现此目标的良好指南:
http://anthonygiretti.com/2019/01/31/implement-dynamic-dependency-injection-in-asp-net-core-2-2-example-with-multitenancy-scenario/
我正在使用 Nunit 在 Selenium 中进行单元测试(以防万一)。
对于这个单元测试,我有一些库包含所有选项的不同语言翻译。 每个库都有一个 class 命名相同的东西,有大量的字符串都具有相同的名称,只是其中的字符串不同。 + 我有一个配置文件,您可以在其中选择要 运行 测试的语言。是否有一种聪明的方法来加载所需的语言库,以便我可以对字符串使用相同的变量?
在 JavaScript 中我可以使用 require(string)。由于输入是一个字符串,我可以使用一个变量来更改使用的实际文件,但将变量命名为相同的名称。
您可以将 json 用作已翻译字符串的存储空间,而不是 class 文件
[{
"Reference": "Hello World",
"French": "Bonjour le monde",
"Japanese": "Harōwārudo"
}]
然后就可以创建DTO了。
public class OptionsTranslation
{
public string Reference { get; set; }
public string French { get; set; }
public string Japanese { get; set; }
}
你只需将 json 反序列化为对象,然后检索值
var options = JsonConvert.DeserializeObject<List<OptionsTranslation>>(File.ReadAllText(<jsonFilepath>));
var frenchOption = options.First(x=> x.Reference.Equals("Hello World").French;
希望对您有所帮助。
您可以使用反射根据配置文件中的值查找相应的程序集,然后新建一个库实例class。 像这样:
string typeString = "My.Assembly.Namesapce.MyClass, My.Assembly.Namesapce, Version=4.0.0.0, Culture=neutral, PublicKeyToken=84474dc3c6524430";
// Get a reference to the type.
Type theType = Type.GetType(typeString, true, false);
// Create an instance of that type.
MyClass theInstance = (MyClass)Activator.CreateInstance(theType);
在这种情况下,您需要更改 typeString
取决于您在配置文件中选择的语言
或者,动态依赖注入似乎可以很好地解决您的问题。这个想法是,您注册可以在您的情况下注入的多种类型语言库。然后在运行时,您可以根据您设置的条件注入正确的库。
这是在 .Net Core 中实现此目标的良好指南: http://anthonygiretti.com/2019/01/31/implement-dynamic-dependency-injection-in-asp-net-core-2-2-example-with-multitenancy-scenario/