2

我不断收到以下错误,一直无法弄清楚。我想知道是否有人可以提供帮助。

错误: 无法加载模块 MyExternalAssembly.MyNamespace.MyModule 的类型。

如果在 Silverlight 应用程序中使用 MEF 时发生此错误,请确保对 MefExtensions 程序集的引用的 CopyLocal 属性在主应用程序/shell 中设置为 true,在所有其他程序集中设置为 false。

错误是:无法从加载的程序集中检索模块类型 MyExternalAssembly.MyNamespace.MyModule、MyExternalAssembly.MyNamespace、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null。您可能需要指定更完全限定的类型名称..

代码:

加载屏幕(加载模块,存储用于各种用途的程序集参考)

    string[] dynamicLibraries = Directory.GetFiles(pluginDirectory, "*.dll", SearchOption.AllDirectories);

    // Parse through the DLL's and look for types that implement "IModule".
    foreach (string file in dynamicLibraries)
    {
        // Get the plugin assembly information.
        Assembly plugin = Assembly.LoadFile(file);

        // Get all types that are exported for plugins.
        IEnumerable<Type> modules = plugin.GetTypes()
            .Where(t => typeof(IModule).IsAssignableFrom(t));

        if (modules.Count() > 0)
        {
            ApplicationState.Instance.Plugins.Add(plugin, modules);
        }
    }

这是 ConfigureModuleCatelog 方法

protected override void ConfigureModuleCatalog()
{
    base.ConfigureModuleCatalog();

    ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;

    foreach (var assembly in ApplicationState.Instance.Plugins)
    {
        foreach (var type in assembly.Value)
        {
            this.ModuleCatalog.AddModule(new ModuleInfo
            {
                ModuleName = type.FullName,
                ModuleType = type.AssemblyQualifiedName,
                Ref = new Uri(assembly.Key.Location, UriKind.RelativeOrAbsolute).AbsoluteUri,
                InitializationMode = InitializationMode.WhenAvailable
            }); 
        }
    }
}

基本上,我需要一种方法来维护/使用这个“插件”字典并让模块化正确地 wprk。和想法?

谢谢!

4

1 回答 1

1

我很困惑。您说 Unity,但您的代码使用 MEF 类型。如果您使用的是 MEF,为什么要手动查找IModule实现 - 您应该使用 MEF 为您进行动态解析。

于 2012-04-16T17:53:23.690 回答