У нас есть приложение, которое имеет функциональность, которая может быть реализована несколькими различными способами. У нас есть стандартизированный интерфейс (скажем, IWorker), который моделирует требуемую функциональность. У нас есть несколько модулей, каждый из которых имеет собственную реализацию IWorker, которая решает необходимые задачи совершенно по-разному. В настоящее время, в зависимости от того, какая версия приложения необходима, мы поставляем конкретную DLL, содержащую соответствующий модуль, и все в порядке. Однако теперь мы хотим поддержать сценарий, в котором пользователь может изменять модули во время выполнения на основе изменяющихся условий (то есть сетевое соединение потеряно, поэтому мы хотим теперь использовать модуль IFileWorker вместо модуля INetworkWorker). Как мы можем выгрузить модуль и загрузить другой во время выполнения?