Я пришел из PHP и довольно много использовал Wordpress , мне нравится, как работает их архитектура плагина и возможность привязывать события к именам событий. Одна из лучших частей, которые мне нравятся, это возможность * add_filter () * к любому значению базы данных непосредственно перед тем, как оно будет показано конечному пользователю. Мой вопрос состоит из нескольких частей о том, как воспроизвести всю архитектуру плагинов в среде C # .NET?
Часть 1:
Для создания плагинов я исследовал, что MEF framework , вероятно, будет лучшим ( Managed Extensibility Framework - http://mef.codeplex.com/). Это разработано специально для того, чтобы выполнить грубую работу, дав вам возможность отслеживать каталоги для новых плагинов, отслеживания зависимостей и других нормальных вещей. MEF поставляется с .NET 3.5 +
Часть 2
Зацепить события? Кажется, я не могу найти много информации о репликации системы событий на основе глобального канала. Из того, что я имею до сих пор, мне нужен шаблон публикации / подписки (который не так сложно сделать, поскольку вы просто создаете некоторые конкретные объекты и передаете им события). Сложная часть заключается в том, чтобы дать каждому событию имя «канала», чтобы все события во всей системе были частью глобальной коллекции ( Шаблон посредника ).
Для копирования: (http://codex.wordpress.org/Function_Reference/add_filter)
Пример 1
// Add's my button to the end of the content
add_filter('the_content', 'my_plugin_button');
function my_plugin_button( $content ) {
// Add's my button to the end of the content
return $content . "<a href='#'>My button</a>";
}
OR
Пример 2
// Add a new admin menu item by hooking in
add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
add_options_page('My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options');
}
Надеюсь, ты еще со мной? Мне удалось воспроизвести необходимые мне функции в Javascript, и даже у jQuery есть функция события .on () ... то же самое, но на основе канала или списка ...
Мои 2 примера:
Может кто-нибудь указать мне правильное направление или это совершенно неправильный подход для c #?