C#根据需要导入不同的库

问题描述 投票:0回答:2

我正在使用Nunit在Selenium中进行单元测试(以防万一)。

对于这个单元测试,我有一些包含所有选项的不同语言翻译的库。每个库都有一个名称相同的类,其中包含大量名称相同的字符串,但内部包含不同的字符串。+我有一个配置文件,您可以在其中选择要使用哪种语言运行测试。是否有一种聪明的方式来加载所需的语言库,以便我可以对字符串使用相同的变量?

在JavaScript中,我可以使用require(string)。由于输入是字符串,因此我可以使用变量来更改使用的实际文件,但将变量命名为同一东西。

c# selenium import nunit
2个回答
0
投票

代替将其作为类文件,您可以使用json作为翻译后的字符串的存储空间

 [{
    "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;

希望这会有所帮助。


0
投票

您可以使用反射根据配置文件中的值查找相应的程序集,然后重新创建库类的实例。像这样:

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/

© www.soinside.com 2019 - 2024. All rights reserved.