3

当我尝试注入 FSharp 库时出现解析错误,但在使用 CSharp 库时却没有。

我有 3 个项目:

  • csharp中的一个主要应用程序
  • 一个 CSharp 项目,其中包含一个类,其构造函数需要一个 IUnityContainer,该 IUnityContainer 可以很好地实例化
  • 一个 FSharp 项目,其中包含一个类,其构造函数需要一个无法实例化并出现错误的 IUnityContainer

依赖项解析失败,type = "ModuleDBGraphFS.ModuleEntityGraphFS",name = "(none)"。异常发生时:解决时。异常是: InvalidOperationException -当前类型 Microsoft.Practices.Unity.IUnityContainer 是一个接口,无法构造。您是否缺少类型映射?

在异常发生时,容器是:

Resolving ModuleDBGraphFS.ModuleEntityGraphFS,(none) Resolving parameter "container" of constructor ModuleDBGraphFS.ModuleEntityGraphFS(Microsoft.Practices.Unity.IUnityContainer container, Microsoft.Practices.Prism.Regions.IRegionManager manager) Resolving 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

虽然 shell 项目本身正在引用

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

我开始的一个新解决方案让我看到了问题所在。因此,它无法解析 UnityContainer 本身的奇怪消息(应该由 Prism Unity 扩展在某处注册......)

于 2013-03-20T19:04:49.323 回答