C # импорт разных библиотек в зависимости от необходимости - PullRequest
0 голосов
/ 30 сентября 2019

Я делаю юнит-тест в Selenium, используя Nunit (в случае, если это имеет значение).

Для этого модульного теста у меня есть несколько библиотек, содержащих переводы всех языков на разные языки. В каждой библиотеке есть класс с одинаковыми именами, с кучей строк с одинаковыми именами, просто внутри разные строки. + У меня есть файл конфигурации, в котором вы выбрали язык, на котором хотите запускать тесты. Есть ли умный способ загрузить необходимую языковую библиотеку, чтобы я мог просто использовать ту же переменную для строк?

В JavaScriptЯ мог бы использовать require (string). И поскольку входные данные являются строкой, я мог бы использовать переменную, чтобы изменить, какой фактический файл использовался, но назвать переменную тем же.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Вы можете использовать отражение, чтобы найти соответствующую сборку на основе значений из вашего конфигурационного файла, а затем создать экземпляр класса вашей библиотеки. Примерно так:

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/

0 голосов
/ 30 сентября 2019

Вместо того, чтобы использовать его в качестве файлов классов, вы можете использовать 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;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...