Inversion of Control очень поможет вам в выполнении такой миграции.Недавно я решил аналогичную проблему, когда меня попросили добавить значительную функциональность в непроверенный код VB.Net для клейкой ленты.Я хотел извлечь существующую уязвимую функциональность из VB.Net и поместить ее в сборку C #, протестированную модулем.
В случаях, когда вы хотите извлечь класс в новую сборку, но это приведет к зависимостям обратно вВ исходной сборке вы можете отрицать это, определяя интерфейс контракта в новой сборке, которая реализуется зависимостями от исходной сборки.
Например, для заданных классов Alpha, Bravo и Charlie в сборке VB.Net, гдеАльфа имеет ссылку на Браво.Вы хотите извлечь Браво, но в нем есть ссылка на Чарли.Определите интерфейс под названием ICharlie в проекте C #, который содержит членов в Charlie, которые заботятся о Bravo.В проекте VB.Net измените Чарли: ICharlie.Когда вы создаете Bravo, он принимает зависимость типа ICharlie.
Преимуществом такого подхода, даже в рамках одного и того же проекта или набора проектов, является тестируемость.Зависимости между классами хорошо известны и могут быть заменены макетами / заглушками, так что такие классы, как Bravo, можно тестировать, не беспокоясь о настройке его с реальной реализацией ICharlie.