2015-04-09 3 views
5

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

Я хотел бы создать для этого логику, чтобы автоматизировать мою работу. Моя идея - загрузить дополнительный модуль в хранилище Blade Azure, и после этого мой проект загружает дополнительный модуль и включает этот дополнительный модуль в мой проект без компиляции всего проекта.

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

Как я могу это сделать?

+0

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

ответ

1

У вас есть несколько вариантов. Самый легкий, на мой взгляд, - создать общий интерфейс, что-то вроде IPlugin. Внесите это в свою удаленную сборку, и пусть ваше приложение проверяет ее.

IPluginManager manager = this; // let this class implement IPluginManager 

Assembly assembly = Assembly.LoadFile(downloadedFilePath); 

foreach (Type type in assembly.GetTypes()) 
{ 
    foreach (Type interfaceType in type.FindInterfaces 
            (delegate(Type m, object filterCriteria) 
            { 
             return m.FullName == typeof(IPlugin).FullName; 
            } 
            , null 
            ) 

      ) 
    { 
     IPlugin plugin = (IPlugin)Activator.CreateInstance(interfaceType); 
     plugin.Activate(manager); 
    } 
} 

Код для IPlugin и IPluginManager:

public interface IPluginManager 
{ 
    void Foo(); 
} 

public interface IPlugin 
{ 
    void Activate(IPluginManager manager); 
} 

Этот код загружает загруженный узел, сохраненный в файле на downloadedFilePath. Затем он находит классы, реализующие IPlugin, и загружает их.

Оттуда, это все ваше. Вы можете использовать оба интерфейса для добавления функциональности в плагины и приложение. Класс, реализующий IPluginManager, обрабатывает все сообщения от и до плагинов.


Если вам не нравится качению свой собственный, вы можете использовать MEF (Managed Extensibility Framework).

+0

Почему downvote? –

+0

Хммм, я не знаю, я голосовал за ваш ответ;) –

Смежные вопросы