Не совсем уверен, если я понял ваш вопрос, но я все равно постараюсь высказать свое мнение по этому вопросу. Надеюсь, это поможет.
Я полагаю, вы выбрали неправильный подход.
- у вас есть два класса, но они не общаются вообще (хотя они должны быть)
- да, вы создали абстрактные классы для наследования, но я не вижу причины в данном конкретном случае, ПОЧЕМУ. Они ничего не определяют, они не применяют никакой логики к созданию классов. Когда вы создаете интерфейс, вы хотите, чтобы кто-то, кто будет его использовать, реализовал его. Вы не можете реально реализовать пустой класс / интерфейс.
Во-первых, я бы предложил исправить эту проблему. Создайте интерфейсы, которые требуют определенных методов или свойств, когда вы хотите их реализовать. Таким образом, вы сможете легче разрабатывать свое основное приложение, потому что вы будете знать, что какую бы проблему ни создавал какой-либо другой разработчик, ему нужно будет реализовать ваш интерфейс с помощью определенных методов, которые вы затем сможете использовать. Если вы позволите реализовать пустой интерфейс, вы не сможете быть точно уверены, каковы будут результаты и чего ожидать. Вы не можете полагаться на них, чтобы они вели себя хорошо (или, по крайней мере, не должны).
Во-вторых, не уверен, что вы это знаете, но когда вы используете модули (Problem + Config как один модуль), поместите каждый в отдельный файл .cs. Таким образом, вы можете иметь практически бесконечное их количество и при этом легко поддерживать свое приложение.
В-третьих, я бы предложил некоторую связь (и связь) между этими классами, используя некоторый интерфейс, подобный этому:
public interface IProblem
{
IProblemConfiguration Config;
// other needed methods or properties
}