2013-03-15 3 views
3

CSharp 라이브러리를 사용하여 FSharp 라이브러리에 주입하려고 시도했지만 해결할 때 오류가 발생합니다.Unity, Prism, FSharp

  • 생성자 클래스를 포함
  • CSHARP 프로젝트는 미세 인스턴스를 가져옵니다 IUnityContainer이 필요
  • CSHARP에있는 주요 응용 프로그램이 생성자 클래스를 포함
  • FSharp 프로젝트가 필요합니다

    나는 3 개 프로젝트가

오류로 인스턴스화 할 수없는 IUnityContainer ependency가 실패했습니다. type = "ModuleDBGraphFS.ModuleEntityGraphFS", name = "(none)". 예외가있는 동안 이 발생했습니다. 해결하는 동안. 예외 : InvalidOperationException - 현재 형식이 이면 Microsoft.Practices.Unity.IUnityContainer가 인터페이스이며 을 구성 할 수 없습니다. 형식 매핑이 누락 되었습니까? 예외시

, 컨테이너이었다

해결 ModuleDBGraphFS.ModuleEntityGraphFS, 생성자 파라미터 "컨테이너"해결 (없음) ModuleDBGraphFS.ModuleEntityGraphFS (Microsoft.Practices.Unity.IUnityContainer 용기 , Microsoft.Practices.Prism.Regions.IRegionManager 관리자) 해결 Microsoft.Practices.Unity.IUnityContainer, (없음) 1 차 프로젝트 (WPF 프로젝트에서

Application 클래스, 당신은 프리스 추가 m, 일부의 경우 F # 프로젝트

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

참조가 동일합니까? 그 오류 메시지는 당신이'IUnityContainer' 매핑 설정을 가지고 있지 않다는 것을 지적하고 있습니다. – Guvante

+0

나는 동일한 참조를 가지고있다. 하나를 호출 할 때 매핑이 존재할 것이고, 다른 것을 호출하지 않을지도 모른다. 나는 가정용 PC에서 시도 할 것이다. – nicolas

+0

내 Mac에서 재현 할 수 없다. 나는 뭔가를 놓치고 있어야하고 정확하게 나중에 무엇을보고 할 것입니다 ... – nicolas

답변

0

에서 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() 
    { 
    } 
} 

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)); 
     } 
    } 
} 

를 추가, app.xaml에서 startupuri를 제거 이유, Nuget 프리즘 용 스크립트가 내 모듈 프로젝트에 추가되었습니다.

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

210 쉘 프로젝트 자체가

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

나는 나에게 문제를보고했다 시작했다 신선한 솔루션을 참조하는 동안. 따라서 UnityContainer 자체를 해결할 수 없다는 이상한 메시지 (Prism Unity extensions ...에 의해 어딘가에 등록되어야 함)