0

我正在使用 StructureMap 在我的应用程序开始时加载插件。在应用程序启动时,当我创建容器时,我会进行简单的扫描,例如:

internal static IContainer Init()
{
    var container = new Container(a =>
    {
        a.Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
            scan.AssembliesFromPath($"{AppDomain.CurrentDomain.BaseDirectory}Plugins");
        });
    });

    ConfigureDebugSubstitutions(container);

    return container;
}

但我在控制台中看到了这些错误:

StructureMap could not load assembly from file <filepath>

我最终通过手动将文件加载到 AppDomain 中来解决它,如下所示:

private static void LoadPluginAssemblies()
{
    var pluginAssemblies = Directory.GetFiles($"{AppDomain.CurrentDomain.BaseDirectory}plugins", "*.dll");
    pluginAssemblies.Each(a =>
    {
        Assembly.LoadFile(a);
    });
}

但我很好奇为什么我一开始就从结构图中收到这条消息。我查看了代码,看起来任何错误都得到了处理。有什么想法吗?我使用的是 4.0.1.318 版本,直到我从 3.1.4.143 版本升级 StructureMap 时才注意到这一点。另外,如果重要的话,我正在使用 .Net v4.6.1。

4

1 回答 1

0

看起来它可能是一个错误。

所以,是的,我知道为什么。它试图直接从 AppDomain 按名称加载程序集,这确实比通过文件路径加载更有效且更不容易出错。很好,但是在您的情况下,它应该尝试回退到按文件加载。我现在正在解决这个问题,它将在 4.1 中。

https://github.com/structuremap/structuremap/issues/451

于 2016-03-02T23:21:14.420 回答