0

請求書アプリケーションを開発しています。

私はMEFモジュラーアプローチを使用しています。

ドキュメントをプリンターに出力する印刷用モジュール (プラグイン) を作成しました。

さて、私の質問は

ユーザーがSalesを追加(保存)すると、Salesというクラスがあります。印刷モジュールがインストールされているかどうかを確認する必要があります。インストールされている場合は、そのモジュールを使用してこの Sales を Printer に渡す必要があります。

取得できません。どうすればこれを達成できますか。

私が考えているのは、[Import(typeof(IPrint))]Sales クラスのプロパティとして使用し、このプロパティに何らかの値がある場合は、ドキュメントをプリンターに送信するということです。

この要件に対するより良いアプローチはありますか。

4

1 に答える 1

1

クラスをどのように実装しているかわかりません。次のようなことを試してください:

//in your Metadata you should have bool FireOnSave
public class Sales
{
    IEnumerable<Lazy<T, TMetadata>> myPlugins;
    private static CompositionContainer _container;
    static Sales()
    {
        var catalog = new AggregateCatalog();
        var d = new DirectoryInfo(".\\");
        catalog.Catalogs.Add(new DirectoryCatalog(d.FullName));
        _container = new CompositionContainer(catalog);
    }

    void ImportPlugins()
    {
         myPlugins = _container.GetExports<T, TMetadata>();
    }

    public void Save()
    {
        //do your saving work here
        fire_plugins();
    }

    private void fire_plugins()
    {
        foreach (var m in myPlugins)
        {
            if (m.Metadata.FireOnSave)
                m.Value.Invoke();
        }
    }
}

ご不明な点がございましたら、お知らせください。

于 2013-04-16T21:19:42.940 に答える