3

他の投稿からこれを検索しようとしましたが、答えが見つからなかったため、新しい質問を作成しました。

ETLシステムを構築しています。

これで、次のインポートを持つクラスができました。

        [Import]
        public IDataExtractor DataExtractor { get; set; }
        [Import]
        public IDataTransformer DataTransformer { get; set; }
        [Import]
        public  IDataValidator DataValidator { get; set; }
        [Import]
        public IDataPublisher DataPublisher { get; set; }
        [Import]
        public  IDataUpdater DataUpdater { get; set; }

私の program.cs には、構成用の次のコードがあります。

            var catalog = new AggregateCatalog();
            if (!string.IsNullOrEmpty(ConfigKeys["Extractor"]))
                catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Extractor"]));
            if (!string.IsNullOrEmpty(ConfigKeys["Transformer"]))
                catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Transformer"]));
            if (!string.IsNullOrEmpty(ConfigKeys["Validator"]))
                catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Validator"]));
            if (!string.IsNullOrEmpty(ConfigKeys["Publisher"]))
                catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Publisher"]));
            if (!string.IsNullOrEmpty(ConfigKeys["Updater"]))
                catalog.Catalogs.Add(new DirectoryCatalog(ConfigKeys["Updater"]));
            var container = new CompositionContainer(catalog);
            container.ComposeParts(this);

ConfigKeys []は私の構成管理システムであり、指定できる場所で、各エクストラクタ、トランスフォーマ、バリデータなどの dll のパスを指定できます。

完全なプロセスは、抽出、変換、検証、公開、更新です。

場合によっては、実行する必要があるのは、抽出、変換、公開の 3 つの機能だけです。したがって、Config システムに Validator dll のパスがない場合、IDataValidator インターフェイスのインスタンスは必要ありません。しかし、空白を指定すると、構成中にエラーが発生します。

エラー: 構成は変更されません。次のエラーのため、変更は拒否されました: 構成で複数の構成エラーが発生し、4 つの根本原因がありました。根本的な原因を以下に示します。詳細については、CompositionException.Errors プロパティを確認してください。「構成で 1 つの構成エラーが発生しました。根本的な原因を以下に示します。詳細については、CompositionException.Errors プロパティを確認してください。\r\n\r\n1) 制約に一致するエクスポートが見つかりませんでした: \n\tContractName\ tCTP.DCU.Models.Interfaces.IDataTransformer\n\tRequiredTypeIdentity\tCTP.DCU.Models.Interfaces.IDataTransformer\r\n"

私の質問は次のとおりです。すべての IMPORT について、EXPORT がない可能性があり、それを適切に処理したいと考えています。MEFでそれを行う方法はありますか?このシナリオをどのように処理できますか? 空のダミースタブを作成して代用しようと思ったのですが、本当にみんなそうなんですか?

ありがとうございました!

4

1 に答える 1

11

オプションにしたい[Import]場合は、次を使用できますAllowDefault

[Import(AllowDefault = true)]
public IDataTransformer DataTransformer { get; set; }

一致するものがない場合[Export]DataTransformerプロパティはそのままになりますnull

于 2013-10-17T19:39:29.280 に答える