gpt4 book ai didi

c# - ResolutionFailedException 与 Unity

转载 作者:行者123 更新时间:2023-11-30 19:42:19 24 4
gpt4 key购买 nike

我正在使用 Patterns and Practices 的 Unity 将依赖项注入(inject)我的对象,并且遇到了一个奇怪的(无论如何对我来说)问题。这是我的类定义:

public class ImageManager : IImageManager 
{
IImageFileManager fileManager;

public ImageManager(IImageFileManager fileMgr)
{
this.fileManager = fileMgr;

}
}

public class ImageFileManager : IImageFileManager
{
public ImageFileManager(string folder)
{
FileFolder = folder;
}
}

这是注册我的类(class)的代码

container.RegisterInstance<MainWindowViewModel>(new MainWindowViewModel())
.RegisterType<IPieceImageManager, PieceImageManager>(
new InjectionConstructor(typeof(string)))
.RegisterType<IImageFileManager, ImageFileManager>()
.RegisterType<IImageManager, ImageManager>(
new InjectionConstructor(typeof(IImageFileManager)));

我最初在像这样的 XAML 文件的后面的代码中解决了这个问题(我知道,它违背了目的。请耐心等待。)

IImageManager imageManager = MvvmViewModelLocator.Container.Resolve<IImageManager>(
new ParameterOverride("folder", "/images"));

它奏效了。但是我为我的主视图创建了一个 View 模型,当我将同一行复制到其中时,出现异常。这是两个最内部的异常:

InnerException: Microsoft.Practices.Unity.ResolutionFailedException
HResult=-2146233088
Message=Resolution of the dependency failed, type = "SwapPuzzleApp.Model.IImageManager", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The type IImageManager does not have an accessible constructor.

At the time of the exception, the container was:

Resolving SwapPuzzleApp.Model.IImageManager,(none)

Source=Microsoft.Practices.Unity
TypeRequested=IImageManager
StackTrace:
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides)
at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides)
at SwapPuzzleApp.ViewModel.MainWindowViewModel..ctor() in c:\Users\Carole\Documents\Visual Studio 2012\Projects\SwapPuzzle\SwapPuzzle\ViewModel\MainWindowViewModel.cs:line 17
at SwapPuzzleApp.ViewModel.MvvmViewModelLocator..cctor() in c:\Users\Carole\Documents\Visual Studio 2012\Projects\SwapPuzzle\SwapPuzzle\ViewModel\MvvmViewModelLocator.cs:line 51
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=The type IImageManager does not have an accessible constructor.
Source=Microsoft.Practices.Unity
StackTrace:

StackTrace:
at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForNullExistingObject(IBuilderContext context)
at lambda_method(Closure , IBuilderContext )
at Microsoft.Practices.ObjectBuilder2.DynamicBuildPlanGenerationContext.<>c__DisplayClass1.<GetBuildMethod>b__0(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
InnerException:

我不确定问题出在哪里,因为 ImageManager 显然有一个公共(public)构造函数。我认为这可能是由于路径无效,但如果我具体实例化该对象,一切正常。

// this line has no problems
IImageManager imageManager = new ImageManager(new ImageFileManager("/images"));

我也想知道我注册IImageManager时是否需要传入new InjectionConstructor(typeof(string)),但它似乎没有帮助,为什么现在而不是以前需要它?所以我很难过。这是我第一次尝试使用依赖注入(inject),所以它可能是一些基本的东西。不过,我只是没看到什么。

最佳答案

仔细查看错误消息。注意这部分:

 Message=The type IImageManager does not have an accessible constructor.

请注意类型名称是 IImageManager,不是 ImageManager。沿线的某个地方,您丢失了类型映射。

你的 FileImageManager 注册也有问题,因为你没有在注册中指定文件夹参数,所以 Unity 不知道要传递什么字符串。

关于c# - ResolutionFailedException 与 Unity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com