3

FSharp ライブラリに挿入しようとすると解決エラーが発生しますが、CSharp ライブラリでは解決エラーが発生しません。

私は3つのプロジェクトを持っています:

  • csharp の主なアプリケーション
  • コンストラクターが正常にインスタンス化される IUnityContainer を必要とするクラスを含む CSharp プロジェクト
  • エラーでインスタンス化できない IUnityContainer をコンストラクターが必要とするクラスを含む FSharp プロジェクト

依存関係の解決に失敗しました。タイプ = "ModuleDBGraphFS.ModuleEntityGraphFS"、名前 = "(none)"。例外が発生しました: 解決中。例外は次のとおりです。 InvalidOperationException -現在の型である Microsoft.Practices.Unity.IUnityContainer はインターフェイスであり、構築できません。タイプマッピングがありませんか?

例外発生時のコンテナは次のとおりでした。

ModuleDBGraphFS.ModuleEntityGraphFS,(none) の解決 コンストラクター ModuleDBGraphFS.ModuleEntityGraphFS のパラメーター「コンテナー」の解決(Microsoft.Practices.Unity.IUnityContainer コンテナー、Microsoft.Practices.Prism.Regions.IRegionManager マネージャー) Microsoft.Practices.Unity.IUnityContainer,(none) の解決)

最初のプロジェクトのアプリケーション クラス (WPF プロジェクト、prism を追加、app.xaml から startupuri を削除、bootstrapper のコード ビハインドを追加)

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

F# プロジェクトで

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

1 に答える 1

0

何らかの理由で、プリズムの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 拡張機能によってどこかに登録する必要があります)。

于 2013-03-20T19:04:49.323 に答える