Настройка хуков приложений — C#/ASP.NET

Многие популярные приложения, такие как Wordpress, WHMCS и большинство PHP-форумов, позволяют плагинам подключаться к основным событиям приложения (таким как регистрация, вход в систему, создание сообщения и т. д.), просто указав функцию с определенным именем.

Я понимаю, что эти приложения не компилируются заранее, но можно ли сделать что-то подобное на C#? Я просмотрел обработчики событий, но кажется, что вы можете сделать это только в том случае, если у плагина есть возможность создать экземпляр класса, к которому мы хотим подключиться (или, по крайней мере, это то, что поиск заставил меня поверить)

В идеале эти перехватчики должны быть связаны с событиями/методами класса бизнес-уровня и могут быть перехвачены несколькими объектами, поэтому он будет работать либо в WinForms, либо в ASP.NET MVC.


person Omar    schedule 06.12.2009    source источник


Ответы (5)


Учитывая ответ Алекса, это должно быть полезно:

Инструменты и примеры System.AddIn
http://clraddins.codeplex.com/< /а>

person Robert Harvey    schedule 06.12.2009

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

Он будет включен как часть базовой платформы в .NET 4, но уже сейчас его можно загрузить для использования в 3.5.

person Reed Copsey    schedule 06.12.2009
comment
Также может быть полезно: MEF против System.AddIn social.msdn.microsoft.com/forums/en-US/MEFramework/thread/ - person Alex; 07.12.2009

Платформа AddIn поставляется с .NET 3.5. Фреймворк предоставляет очень мощные механизмы для предоставления интерфейсов хост-приложению и для управления, динамической загрузки-выгрузки надстроек и т. д.

person Alex    schedule 06.12.2009

Почему основной концепцией, которая приходит мне на ум в первую очередь, является внедрение зависимостей? Я никогда не играл с системой плагинов ни в одном из моих приложений. Может ли DI помочь в этом??

person Aggelos Biboudis    schedule 06.12.2009
comment
Если кто-то утверждает технологически, может быть, это так! - person Aggelos Biboudis; 07.12.2009

Конкретные сведения о нашем senerio были бы полезны, но в целом вы можете изучить psttern провайдера.

Есть 3 компонента: - Абстракция части функциональности (Interface/baseClass) - Фабричный метод, который обращается к конфигурации, чтобы определить, какой тип класса создать - [ваш] пользовательский класс, который расширяет/реализует абстракцию. например, класс поставщика членства, который обращается к пользовательскому источнику данных для получения информации о пользователе.

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

Это поддерживается в ASP.NET, начиная с версии 2.0. Дополнительные сведения о поставщике: http://msdn.microsoft.com/en-us/library/ms972319.aspx

person brian chandley    schedule 06.12.2009
comment
Интересно, Брайан, просто из любопытства, как бы вы создали сменные компоненты пользовательского интерфейса? - person ram; 07.12.2009
comment
Ram, Честно говоря, не уверен. Я не знаю четко определенного/стандартного способа приблизиться к этому. Я не думаю, что это было бы просто в контексте ASP.NET. - person brian chandley; 07.12.2009