Вопрос по dynamic-loading, .net, asp.net, plugin-architecture, c# –  делать такие вещи и многое другое.

2

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

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

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

Вместо этого я могу выпустить dll для каждого дополнения, которое дает мне больше контроля над написанием кода для определения поведения / внешнего вида элемента управления и динамической загрузки его через основной движок? Если да, то как я могу проверить dll и динамически загрузить его в свое приложение?

Вы можете проверитьmef.codeplex.com также. henginy
Я думал, что в более новых версиях .NET есть фреймворк для плагинов ... Я постараюсь найти их для вас, так как вам, вероятно, следует пойти по этому пути. Daren Thomas

Ваш Ответ

3   ответа
1

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

Я несколько раз «катил» это решение, и я бы сказал, что если нет веских причин сделать это с нуля, лучше использовать существующую платформу надстроек. Но если вы собираетесь это сделать, я обнаружил, что контейнеры для инъекций зависимостей, такие как Castle или (вставьте предпочитаемый вами DI-контейнер здесь), помогут справиться с некоторыми механиками.

Кроме того, в зависимости от того, что именно вы хотите сделать, подход встраивания макроязыка потенциально полезен. Железный Питон легко встраивается. И Айенде написал очень интересную книгуDSL в Бу делать такие вещи и многое другое.

9

Структура управляемой расширяемости, Это, вероятно, решит большинство ваших проблем и многое другое, но потребует изучения некоторых новых технологий ...

Вы также должны обязательно заглянуть вSystem.Addin Пространство имен, как подсказывает Матье!

Если вы хотите пойти по собственному маршруту, я предлагаю следующий подход:

интерфейс для дополнений в вашем основном приложенииреализовать этот интерфейс в аддон dllзагрузить библиотеки во время выполненияAssembly.Loadвы можете посмотреть загрузку сборок аддона в отдельный домен приложений
4

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

http://kentb.blogspot.com/2008/06/maf-gymnastics-skeletal-solution.html

Смотрите этот вопрос для сравнения:Выбор между MEF и MAF (System.AddIn)

+1 Я не знал, что их было два, и то, что я в конечном итоге предложил (MEF), было не тем, что я думал, что я предлагал (MAF) - Google не может прочитать мои мысли этим утром, должен выпить больше кофе :) Daren Thomas

Похожие вопросы