1

私は現在MEFプロジェクトを構築しているので、実際のアプリケーションでそれを使用する方法を学ぶことができます。データベース接続やその他の集中型データベース操作を提供するために、DataHandlerモジュールを正常にインポートしました。

今、私は他のインポートされたモジュールにメソッドを提供する方法を考えています。たとえば、セキュリティモジュールがデータベースへの接続を必要とする場合、データベース接続を要求できます。これで、ホストアプリケーションがDataHandlerを公開するときに、DataHandlerが使用可能かどうかをモジュールが検出する方法があります。したがって、EventAggregatorDbConnectionを使用して、サブスクライバー(セキュリティモジュール)が単にイベントを発生させ、オブジェクト を取得するタイプのイベントを公開する方法があるかどうか疑問に思っています。

EventAggregatorが答えである場合、その方法についていくつかのヒントを使用できます。私はまだ研究中であることを覚えておいてください...単にcodezを求めているだけではありません。そこにもっと良い解決策があるなら、私はオプションに興味があります。

私は現在、DenisVuykaによるこの投稿をレビューしています

編集

EventAggregatorは、使用するのに適切なツールではないようです。ホストアプリに実装できる、ゆるく結合されたメッセージングのようなものはありますか?サービスロケーターまたはコマンドパターンは実装できるものですか?

4

2 に答える 2

2

EventAggregatorではなく、ServiceLocatorを探しているようです。

しかし、すでにMEFを使用してサービスを注入しているのに、なぜサービスロケーターを介してサービスを要求するのでしょうか。後で実行時にサービスを取得する必要がある場合は、Lazy<T>代わりにまたはファクトリを注入できます。

于 2010-12-14T02:18:46.547 に答える
1

メインのアプリインターフェイスをエクスポートして、すべてのモジュールに構成を渡します。メインアプリでホストされているdbインターフェースの単一インスタンスを持つことができます。

ホストアプリケーションはそれ自体をエクスポートし、すべてのプラグインはそれをインポートして、そのインターフェイスにアクセスできます。以下の私の例を参照してください。

インターフェース:

public interface IMainApp
{
    ConfigClass Config { get; set; } 
}

ホストアプリ:

[Export(typeof(IMainApp))]
public class Host : IMainApp
{
    public Host()
    { /* Compose parts etc here..? */ }

    public ConfigClass Config { get; set; }  

    [Import(typeof(IModule))]
    public List<IModule> LoadedModules { get; set; }
}

プラグインアセンブリ:

[Export(typeof(IModule))]
public class Module : IModule
{        
    public Module() { }

    [Import(typeof(IMainApp))]
    public IMainApp Host { get; set; } 

    public void DoSomething()
    {
        Host.Config... // use config here
    }
}
于 2010-12-14T21:59:39.880 に答える