WebApiプロジェクトでMEFを使用して、binフォルダ以外のフォルダにあるプラグインを読み込みます。その後MEFを使用してプラグインを読み込むときにHangfireを使用するには?
var directoryCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins"));
var container = new CompositionContainer(directoryCatalog);
container.ComposeParts();
IList<IPlugin> plugins = container.GetExportedValues<IPlugin>().ToList();
私が実行してプラグインを設定してい::
plugins[0].Startup(logService, unitOfWork);
注:私は既存のインスタンスを使用していますので、私は上記の依存関係を渡すために[ImportingConstructor]
を使用していない私は、次の操作を行いますすでにコントローラでインスタンス化されています。
次のようにその後、私は仕事をスケジュール:Hangfireは、ジョブを開始しようとしたとき
BackgroundJob.Schedule(() => plugins[0].Start(), new TimeSpan(0, 0, 1));
はしかし、私は次の例外を取得:
は、ファイルまたはアセンブリをロードできませんでした「App.Pluginsを.FirstPlugin、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null 'またはその依存関係の1つ。システムは、指定されたファイルを見つけることができません。
このようなシナリオでMEFとハングファイアを併用することは可能ですか?はいの場合は、正しい手順は何ですか?
注:プラグインDLLがメインアプリケーションと同じbinフォルダにある場合、Hangfireは正常に動作します。しかしこれは、別のプラグインフォルダを持つという目的を破っています。
私は上記のコードを 'Global.asax'の' Application_Start'の中に置きました。それでも同じ問題があります。 –
@ Ivan-MarkDebonoは、 'pluginPath'を使用する)第1のコードブロックを試して、' Application_Start'の最初のステートメントとして配置します。 – Evk
@ Ivan-MarkDebono私はまた、(プラグインパスを使用しない)2番目のコードブロックを修正しました。これは 'Application_Start'でも動作するはずです。 – Evk