2012-04-16 25 views
2

私は以下のエラーが発生し続けており、それを把握することができませんでした。誰かが助けることができるかどうか疑問に思っています。PRISM + Unity - モジュールの動的セットの読み込みの問題

エラー: は、モジュールMyExternalAssembly.MyNamespace.MyModuleのためのタイプのロードに失敗しました。

MEFをSilverlightアプリケーションで使用しているときにこのエラーが発生した場合は、MefExtensionsアセンブリへの参照のCopyLocalプロパティがメインアプリケーション/シェルでtrueに設定されていることを確認してください。

エラーだった:モジュールタイプMyExternalAssembly.MyNamespace.MyModuleを取得できません、MyExternalAssembly.MyNamespace、バージョン= 1.0.0.0、文化=中立、な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 
      }); 
     } 
    } 
} 

基本的には、この「プラグイン」辞書を維持管理する方法が必要であり、Modularizatイオンを適切にwprkする。そしてアイデア?

ありがとうございます!

答えて

1

私は混乱しています。あなたはUnityと言うが、あなたのコードはMEFの型を使っている。 MEFを使用している場合、なぜ地球上でIModuleの実装を手動で見つけるのですか?動的解決を行うには、MEFを使用する必要があります。

+0

ブートストラップはUnityBootstraperから継承されています。ロード中のモジュールを読み込み画面に表示する必要があるため、私は手動でIModuleを探しています。コントロール全体の側面は、モジュールをAvalon Dock(DockableContent)にロードする必要があるためです。モジュールをラップしてDockableContentベースで手動でロードするだけです。 最後に、もう少し研究をする必要がありますが、学習して物事を進めようとしています。私はあなたが間違っていると思うところに何か提案をします。 – Dave

+0

また、「MEFタイプ」を決定するためにエラーを参照している場合、「If」ではなく「MEFを使用しているときにこのエラーが発生した場合」と表示されます。私はPrism/Unity/MEFマスターからは遠いですが、おそらくあなたはどのタイプがMEFであるかを教えてくれるでしょうか? – Dave

+0

ModuleCatalogはMEFタイプなので、私は混乱しています。 UnityをMEFで使用している理由は何ですか? –

関連する問題