Есть ли способ добавить ссылки без перекомпиляции в .NET?

Я использую контейнер IoC (Castle Windsor) для создания экземпляров классов в соответствии с файлом конфигурации. Если я хочу добавить классы из новой dll, которой не было, когда я компилировал проект, есть ли способ сделать это без перекомпиляции?

Редактировать: Поскольку этот проект является узлом службы для службы WCF, а классы, которые я хочу включить после компиляции, являются службами WCF, я также хотел бы знать, могу ли я включить информацию конечной точки о новых службах без перекомпиляции. .


person Jader Dias    schedule 13.01.2010    source источник
comment
@serhio - это неверная догадка? Не использовал сам Castle, но как IoC может не поддерживать динамическую загрузку сборок на основе файла конфигурации?   -  person Daniel Earwicker    schedule 13.01.2010


Ответы (2)


Я не знаю конкретно о Windsor, но я ожидаю, что это возможно - просто укажите полное имя типа, включая имя сборки:

<component id="foo"
           service="Namespace.IInterfaceName, InterfaceAssembly"
           type="Namespace.ImplementationName, ImplementationAssembly" />
person Jon Skeet    schedule 13.01.2010
comment
А как же WCF? Можно ли включить службу в конфигурацию конечной точки без перекомпиляции? - person Jader Dias; 13.01.2010
comment
@Jader: Боюсь, я недостаточно знаю о WCF, чтобы сказать. Но опять же, если вы уже указываете там тип, включая сборку, то я ожидаю, что это просто сработает. - person Jon Skeet; 13.01.2010

Да, именно для этого и существует Замок Виндзор. Я использую Castle в проекте дома и использую его для динамической загрузки классов из сборок, которых, вероятно, не существовало, когда я создавал класс.

Хитрость заключается в том, что загружаемые вами классы должны реализовывать интерфейс, известный вашему приложению.

Смысл этого в том, чтобы вы могли включать и выключать различные функции по мере необходимости. Ваш проект использует ISaveMyData для сохранения материала и использует Castle Windsor для использования Oracle или MySql, в зависимости от того, что установлено на клиентском сайте.

Что касается WCF, компоненты WCF уже должны указывать интерфейс, который они используют (их контракт). В обычной конфигурации для компонентов WCF вы можете изменить адрес конечной точки и другую информацию, чтобы указать на разные компоненты, когда вам нужно, если они используют один и тот же контракт. Для этого не нужен замок Виндзор. Никакой перекомпиляции также не требуется — просто внесите изменения в конфигурацию и вперед.

person Tad Donaghe    schedule 13.01.2010
comment
Но если я хочу, чтобы одно и то же приложение изменило интерфейс размещенной службы без перекомпиляции, мне понадобится контейнер IoC. - person Jader Dias; 13.01.2010
comment
Подождите — вы говорите, что хотите переключить один компонент WCF на другой, который использует совершенно другой интерфейс? - person Tad Donaghe; 13.01.2010
comment
Я создал узел службы, на котором может размещаться любая служба, любой интерфейс. Вот почему я хотел сделать именно то, что вы описали. - person Jader Dias; 13.01.2010