Можно ли поменять функционал после компиляции проекта C#?

Здравствуйте! Возник такой вопрос: А возможно ли изменить реализацию функционала после того как проект будет уже скомпилирован, но без перекомпиляции программы?

Это можно сделать через РЕФЛЕКСИЮ: просто грузите свою сборку, ищите названия своих классов, которые реализуют интерфейс, и используете их.

Как вариант - использовать IoC-контейнер:

  • 1) в главной сборке создать контейнер.
  • 2) найти нужную сборку и передать в неё этот контейнер
  • 3) в той сборке забиндить нужный класс на этот интерфейс в переданном контейнере.

Тот же приём можно использовать, когда в решении есть два проекта, второй проект использует первый проект (первый добавлен в зависимостях), а вот первому нельзя добавить второй проект в зависимостях. Решение - контейнер в первом проекте, а классы биндятся во втором. Тогда пункт 2 не нужен.