2013-03-15 45 views
3

當我嘗試注入FSharp庫時遇到解析錯誤,但不是我用CSharp庫執行此操作。Unity,Prism,FSharp

我有3個項目:

  • 在C#一個主要應用
  • 含有類,它的構造函數CSHARP項目需要被實例化的罰款IUnityContainer
  • 含有類,它的構造
  • 一個FSharp項目要求無法實例化錯誤的IUnityContainer

d依賴失敗,類型= 「ModuleDBGraphFS.ModuleEntityGraphFS」,name =「(none)」。發生異常 while:解析。例外是: InvalidOperationException - 當前類型, Microsoft.Practices.Unity.IUnityContainer,是一個接口,不能構造 。你是否缺少類型映射?

在異常時,該容器是:

解決ModuleDBGraphFS.ModuleEntityGraphFS,(無)解決構造 參數 「容器」 ModuleDBGraphFS.ModuleEntityGraphFS(Microsoft.Practices.Unity.IUnityContainer 容器,Microsoft.Practices.Prism.Regions.IRegionManager經理) 解決Microsoft.Practices.Unity.IUnityContainer,(無)在第1個項目(WPF項目

應用類,添加PRIS米,刪除的App.xaml中的StartupUri,在F#項目

type ModuleEntityGraphFS(container:IUnityContainer, manager:IRegionManager) = 
    do printfn "hi" 
    interface Microsoft.Practices.Prism.Modularity.IModule with 
     member x.Initialize() = 
      do() 
+0

你的引用是相同的嗎?該錯誤信息指出你沒有'IUnityContainer'映射設置。 – Guvante 2013-03-15 22:08:28

+0

我有相同的參考文獻......當調用一個而不是另一個時,映射會在那裏,這很奇怪。我會嘗試在家用電腦上。 – nicolas 2013-03-16 12:31:18

+0

我無法在我的Mac上重現。我一定會錯過一些東西,並會報道什麼後來... – nicolas 2013-03-16 14:12:10

回答

0

添加的代碼後面的引導程序)

namespace WpfApplication 
{ 
    class Bootstrapper : UnityBootstrapper 
    { 
     protected override DependencyObject CreateShell() 
     { 
      return this.Container.Resolve<Shell>(); 
     } 

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

      App.Current.MainWindow = (Window)this.Shell; 
      App.Current.MainWindow.Show(); 
     } 

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

      ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog; 
// OK  moduleCatalog.AddModule(typeof(ModuleDBGraph.ModuleEntityGraph)); 
// KO  moduleCatalog.AddModule(typeof(ModuleDBGraphFS.ModuleEntityGraphFS)); 
     } 
    } 
} 

在C#項目

public class ModuleEntityGraph : IModule 
{ 
    private IUnityContainer _container; 
    private readonly IRegionManager _manager; 

    public ModuleEntityGraph(IUnityContainer container, IRegionManager manager) 
    { 
     _container = container; 
     _manager = manager; 
    } 

    void IModule.Initialize() 
    { 
    } 
} 

對於一些原因,Nuget棱鏡腳本在我的模塊項目中添加了參考文件

C:\windows\assembly\GAC_MSIL\Microsoft.Practices.Unity\1.2.0.0__31bf3856ad364e35\Microsoft.Practices.Unity.dll 

雖然殼牌項目本身引用

WpfApplication3\packages\Unity.2.1.505.2\lib\NET35\Microsoft.Practices.Unity.dll 

,我開始讓我看到了問題的一個新的解決方案。 因此,奇怪的消息,它無法解決UnityContainer本身(這應該註冊的地方由Prism Unity擴展......)