Grabacr07/KanColleViewer — pull request #94 by takeshik (2014-05-21 17:17:57+00:00)
Title: MEF によるプラグイン システムの実装 + (ひとまず) 通知システムの切り離し

## 概要
* 以前からネタにしてた件です
* 通知部分を KanColleViewer から切り離してプラグイン側に動かしました (なので、KanColleViewer 側が少しすっきりしてます)

## 留意事項
* 本当はロギングもプラグイン化したかったのですが、ロギング処理が KanColleWrapper 内で API サーバのレスポンスをそのまま読んでる一方で、プラグイン側で生の API データが流れるのはあんまりかなと思うので、ひとまず現状では放置としてます。
* MEF はアプリケーション起動中にプラグイン ディレクトリにアセンブリ置くと勝手にロードしてくれるらしいですが、そのように起動中にロードされる型に対して `Initialize` メソッドを呼んでないので、適切に有効化されないです。
* まあ、起動中にプラグイン追加する物好きはきっと居ないですよね…
* 本当はインターフェイスとかアセンブリ別立てした方がよかったのかもですけど、どうせ色々アクセスしたくなるのが目に見えてるので、KanColleViewer.exe を参照してもらう形になってます。目に余るようでしたら対処して頂けますと有難いです。
* 一応、標準の通知が動作することはそれなりに十分確認してますが、それ以外について (他のプラグインが現状の設計で動作を満たせるか) はそこまで確認してないです。

## 現状の動作
* `Plugins` ディレクトリに `[Export]` したアセンブリを配置するとロードされます。
* プラグインが依存する追加のアセンブリは KanColleViewer.exe と同じディレクトリ (`AppBase` というやつですね) に置く必要があります
* 現状は `INotifier` だけ拡張に対応してます。今後増やすなら `PluginHost.Notifiers` みたいなプロパティを更に追加していくことになるかな…
* 後はふつうです。

## その他
* 私が勝手に作るプラグインについては、これから https://github.com/takeshik/KanColleViewer.Plugins に色々置いてゆく予定です。