2009-11-19 1 views
1

Я работаю над приложением, в котором пользователи могут создавать классы программно во время выполнения. У них есть экран пользовательского интерфейса, где они заполняют метаданные, которые превращаются в классы. В основном, данные, которые вводит пользователь, используются для создания свойств в файле .cs.Загрузка сборок во время выполнения - плагин против appDomain vs StructureMap против MEF

Итак, мне нужно создать экземпляр объекта из сгенерированного файла класса после того, как пользователь завершит ввод метаданных. Поскольку файл класса является новым и не является частью скомпилированного кода для веб-приложения, как я могу загружать и создавать экземпляр класса?

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

Я изучил создание appDomain и загрузку dll, но это не удается, потому что процесс не может найти DLL (хотя я использую физический путь для вновь созданной DLL). Я рассмотрел архитектуру подключаемого модуля - MEF (Microsoft Extensibility Framework), MAF (Microsoft Addin Framework), но я немного запутался в использовании.

Каков наилучший подход к использованию?

+0

Вы уверены, что это правильный подход? Похоже, вы каким-то образом объединяете понятия класса/экземпляров. Классы - скорее статическая концепция, а примеры - концепция времени выполнения. Я говорю больше, потому что в нескольких примерах вы можете увидеть обратное. –

ответ

0

похоже, что вы используете не тот инструмент для работы. Для этого типа динамического объекта есть динамические расширения в .net40, и в противном случае вы можете использовать шаблон объекта общей маски собственности.

Но если вы действительно хотели сделать это и сохраните его достаточно просто, используйте MEF. Structuremap работает с хорошо известными типами данных. MEF превосходит при составлении вместе неизвестных объектов. все, что вам нужно сделать, это применить экспорт к сгенерированным классам, скомпилировать dll, спросить MEF о создании контейнера из dll, а затем вы можете получить объекты из MEF.

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