1

是否可以将两个核心库链接到您的应用程序中?
我想创建一个具有登录和帐户视图模型的 Common.Core 库。
我想要另一个包含一些域视图模型的 Domain.Core 库。
这些可以用于几个不同的项目。
在我的应用程序中,我做了一个新的 Setup().Initialize()。
我的 Setup 类覆盖 CreateApp() ...

public class Setup : MvxPhoneSetup
{
    protected override IMvxApplication CreateApp()
    {
        CreatableTypes().EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();
        return new Common.Core.App();

        // TODO: can I setup a Domain.Core library here too?
    }
}

我试过这样做......

CreatableTypes(Assembly.Load("Domain.Core")).EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();

但是当我尝试从那里解析域模型时,我得到了 ReflectionTypeLoadException。
有人尝试过这样的事情吗?

谢谢!

4

1 回答 1

1

是的,使用多个“核心”项目应该可行。

ReflectionTypeLoadException发生的事情Resolve表明您的第二个程序集可能需要另一个不可用的程序集?对于一个非常简单的第二个核心项目,你会遇到同样的问题吗?你能得到更多关于异常的信息吗?这发生在哪个平台上?


如果ViewModel要从多个程序集中加载类型,则可以覆盖一个 Setup 方法 - MvvmCross 中的默认 ViewModelLocator 从 Setup 中列出的程序集中获取其 ViewModel 列表 - 请参阅MvxSetup.cs

(对不起,这个列表在 ui 项目中——应该真的在主核心项目中)


对于跨平台兼容性,我不建议使用Assembly.Load- 最好使用更静态的方法,例如typeof(Domain.Core.Something).Assembly

在“打包应用程序”平台上工作,如 xamarin.android 和(尤其是)xamarin.ios 我不建议使用Assembly.Load- 如果程序集被静态引用并且已经加载,这只会在 iOS 平台上工作 - 这就是插件有的原因iOS 上的特殊引导文件。另请注意,Assembly.Load 中使用的名称在不同平台上是不同的 - 例如,在 Android 中,您必须使用以 .dll 结尾的文件名 - 请参阅MvxAndroidSetup.cs。对于 WP 和 winRT 等其他平台,Assembly.Load可能会更传统地工作 - 尽管我个人在去年花了数小时/数天/数周对这种代码发誓。

于 2013-05-23T06:47:28.713 回答