Проблема:
Я создаю фреймворк, который принимает файл, переводит это и выполняет это. Фреймворк должен иметь возможность обрабатывать файлы любого типа, для этого я предоставил метод загрузки DLL, содержащей классы и методы для преобразования и выполнения файла. То, что я ищу, это лучший способ определить интерфейс плагина
Решение A:
Определите набор интерфейсов, которые являются общедоступными. Плагины должны реализовывать эти интерфейсы.
Решение B:
Определите некоторые абстрактные классы, которые являются общедоступными. Плагины должны наследовать и переопределять абстрактные методы в этих классах.
Решение C: rcravens
Обменивайтесь интерфейсами внутри кода, создавайте абстрактный класс, который является общедоступным, чтобы обеспечить расширяемость плагинов. Избранный
Это решение было выбрано перед интерфейсом только потому, что оно обеспечивает базовую реализацию (в данном случае удобно). Он был выбран перед абстрактным классом только потому, что он допускает насмешку в коде. Композиционные каркасы превосходны, но немного за что-то такое легкое, как это приложение, где требуется только ограниченная расширяемость.
Решение D: Джей и Крис Шейн
Реализовать составную среду (например, Managed Extensibility Framework (MEF) ) и построить вокруг нее
Если появятся какие-либо новые решения, я добавлю их в этот список. Ответ будет дан человеку, который лучше всех сможет обосновать свое решение (возможно, с преимуществами и ограничениями)
Заранее спасибо,
Tech Test Dude