【发布时间】:2014-04-30 14:30:09
【问题描述】:
当视图模型依赖项分布在不同的项目中时,我无法实例化视图模型。
ViewModel的构造函数如下:
public MyViewModel(IMyBusinessLogic businessLogic)
{
...
}
public class App : Cirrious.MvvmCross.ViewModels.MvxApplication
{
public override void Initialize()
{
CreatableTypes().
EndingWith("BusinessLogic").
AsInterfaces().
RegisterAsLazySingleton();
RegisterAppStart<MyViewModel>();
}
}
IMyBusinessLogic 位于同一解决方案的不同项目中。该接口的实际实现在不同的项目中。
我已经在 viewmodel 项目中添加了业务逻辑接口项目作为参考。
谁能帮忙解决这个问题?
错误日志:
mvx:Diagnostic: 0.12 显示 ViewModel MyViewModel 'TaskHost.exe' (CoreCLR:Silverlight AppDomain):已加载 'C:\Data\Programs{9E891FD9-C43E-4ED3-9EDC-153E29371D89}\Install\BusinessLogic.Interface.DLL'。 已加载符号。 mvx:警告:0.38 创建视图模型类型的问题 MyViewModel - 问题 MvxIoCResolveException: 无法解决 类型为 IMyBusinessLogic 的参数 myBusinessLogic 时的参数 创建 ViewModel.Core.MyViewModel 在 Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.GetIoCParameterValues(类型 类型,ConstructorInfo firstConstructor)在 Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.IoCConstruct(类型类型)
在 Cirrious.CrossCore.Mvx.IocConstruct(Type t) 在 Cirrious.MvvmCross.ViewModels.MvxDefaultViewModelLocator.TryLoad(类型 viewModelType, IMvxBundle parameterValues, IMvxBundle savedState, IMvxViewModel& viewModel) 'TaskHost.exe' (CoreCLR: Silverlight 应用程序域):已加载 'C:\windows\system32\en-US\mscorlib.debug.resources.dll'。模块是 无符号构建。
@斯图尔特: 正如 wiki 中提到的那样,我已经覆盖了存在于平台特定 UI 项目中的 Setup.cs 中的 GetViewModelAssemblies() 方法。
protected override Assembly[] GetViewModelAssemblies()
{
var list = new List<Assembly>();
list.AddRange(base.GetViewModelAssemblies());
list.Add(typeof(BusinessLogic.Core.MyBusinessLogic).Assembly);
list.Add(typeof(BusinessLogic.Interface.IMyBusinessLogic).Assembly);
return list.ToArray();
}
但现在我观察到的是调用顺序首先是 App.Initialize(),然后是 Setup.GetViewModelAssemblies()。所以我再次看到同样的问题,它无法从 IoC 中找到所需的类型来创建视图模型。对此有何建议?
【问题讨论】:
-
我做了更多分析。目前我观察到的是,MvxApplication: CreatableTypes() 方法只查找当前的 Dll,而不是其他已加载的 Dll。而且由于我的接口和接口的实际实现位于不同的 dll 中,因此无法在这些 dll 中查找,因此业务逻辑类没有被注册。 有什么方法可以让 MvxApplication: CreatableTypes() 方法在所有加载的 Dll 中查找?
-
我现在在移动设备上......但这在 wiki 的某个地方 - 在设置中查找视图模型程序集
-
@Stuart :试图覆盖 GetViewModelAssemblies(如上面的问题所示)。仍然遇到同样的问题。我在这里缺少什么吗?
标签: inversion-of-control mvvmcross