【发布时间】:2017-12-15 08:47:30
【问题描述】:
我在我的 WebApi 项目中使用 MEF 来加载位于 bin 文件夹以外的文件夹中的插件。我执行以下操作:
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] 传递上述依赖项,因为我使用的是已经在控制器中实例化的现有实例。
然后我将作业安排如下:
BackgroundJob.Schedule(() => plugins[0].Start(), new TimeSpan(0, 0, 1));
但是,当 Hangfire 尝试启动作业时,我收到以下异常:
无法加载文件或程序集“App.Plugins.FirstPlugin,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。
在这种情况下甚至可以同时使用 MEF 和 Hangfire 吗?如果是,正确的程序是什么?
注意: 如果插件 DLL 与主应用程序位于同一 bin 文件夹中,则 Hangfire 可以正常工作。但这违背了拥有单独插件文件夹的目的。
【问题讨论】:
标签: c# asp.net-web-api mef hangfire