Есть ли способ добавить ссылки без перекомпиляции в .NET? - PullRequest
1 голос
/ 13 января 2010

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

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

Ответы [ 2 ]

6 голосов
/ 13 января 2010

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

<component id="foo"
           service="Namespace.IInterfaceName, InterfaceAssembly"
           type="Namespace.ImplementationName, ImplementationAssembly" />
1 голос
/ 13 января 2010

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

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

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

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

...