0

私は、交換メールボックスを監視し、特定の電子メールを選択し、その内容に基づいていくつかのデータベースを更新する、非常に単純なコンソールアプリを持っています。

同様のシステムをいくつか実装したいと思います。このシステムを複製するのは非常に簡単ですが、私はより洗練されたソリューション、主に知的演習、学習演習を検討しています。

DBから定期的にテンプレート情報を取得するコアアプリケーションを構築したいと思います。この情報は、特定の間隔で特定の特性を持つ電子メールについて特定のメールボックスを監視する必要があるアプリに通知します。

いくつかの仮想機能(前処理、アイテムの処理、アイテムのアーカイブ、通知の送信など)を使用してマスターテンプレート(アセンブリ)を作成することを想定しています。次に、マスターテンプレートのインターフェイスを実装するテンプレートをいくつでも作成しますが、機能はそれぞれ大きく異なる可能性があり、データベースを更新する場合と、ファイルシステムに何かを保存する場合があります。

私の最初の質問は、これが賢明な実装であるかどうかです。

2番目の質問は、各テンプレートを動的に参照する方法と、適切なタイミングでこれらのテンプレートのメソッドを呼び出す方法です。

テンプレートプロジェクトを拡張し、必要な新しいテンプレートごとに新しいクラスを追加すると、テンプレートを動的に参照するという問題を克服できます。しかし、それらを別々のアセンブリに保持したい場合は、それらをプロジェクトにドロップする方法はありますか?テンプレートはDBにリストされるので、アプリはそれらを認識しますが、それらを使用する方法を忘れないでください...

更新:各テンプレートクラスを動的に参照する方法を理解しました。GetTypeにアセンブリ修飾名を指定する必要があります:メインアプリでテンプレートを動的に生成しようとしました:

string aqn= "MasterTemplates.TestTemplate, TestTemplate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
MasterTemplate mt = (MasterTemplate)Activator.CreateInstance(Type.GetType(aqn));

したがって、MasterTemplatesプロジェクトを更新し続け、必要に応じて新しいクラスを追加すれば、私が目指していることを達成できます。ただし、さまざまなテンプレートアセンブリを処理するにはどうすればよいですか?

それまでの間、私はまもなくDBMによるManagedExtensibilityFrameworkの提案を見ていきます。

結論: MEFを完全に調査する時間がありません。私の現在のニーズにはやり過ぎですが、非常に有望に見えます。また、テンプレートごとに異なるアセンブリを簡単に開発して使用する方法を理解していません。代わりに、すべてのテンプレートを1つのアセンブリに保持しているため、新しいテンプレートが必要になるたびに再コンパイルして更新する必要があります。MEFの代替品ほど洗練されていませんが、よりシンプルで現在のニーズに適しています。

4

2 に答える 2

2

MEFを使用して、プラグインを動的にロードできます。VS2010には同梱されており、アセンブリを動的にロードするのに最適です。

于 2012-01-27T16:58:31.047 に答える
1

文字列でアクティベーターを使用する場合は、Activator.CreateInstance(String、String)オーバーロードを使用します。

または、そのタイプのインスタンスを作成して、次のように使用することもできます。

Activator.CreateInstance(Type.GetType(templateName));
于 2012-01-27T18:02:44.897 に答える