【发布时间】:2013-11-15 22:18:48
【问题描述】:
我在 Android 项目中使用自己的 MvvmCross 插件时遇到问题,因为 PluginLoader 似乎期望它所在的确切命名空间的 .Droid.dll。
假设我有三个具有此文件夹和命名空间结构的项目:
MyApp.Core:
Plugins/Settings/ISettings.cs
Plugins/Settings/PluginLoader.cs
MyApp.Droid:
Plugins/Settings/Settings.cs
Plugins/Settings/Plugin.cs
Bootstrap/SettingsPluginBootstrap.cs
MyApp.Touch:
Plugins/Settings/Settings.cs
Plugins/Settings/Plugin.cs
Bootstrap/SettingsPluginBootstrap.cs
iOS 项目按预期工作,找到插件没有问题。
另一方面,Droid 项目失败并出现异常:Could not load file or assembly 'MyApp.Plugins.Settings.Droid.dll' or one of its dependencies.
如果我将PluginLoader 的命名空间从MyApp.Core.Plugins.Settings 更改为简单的MyApp,插件就可以工作;我猜它会寻找MyApp.dll 并找到它。但是,如果我的应用中有多个插件,它们应该都有自己的命名空间,它们不能都在 MyApp 命名空间中。
目前我发现的唯一解决方法是为我创建的每个插件创建一个单独的项目,尽管这感觉有点不必要。
为什么PluginLoader在Android上坚持寻找<PluginLoader namespace>.Droid.dll文件,而在iOS上PluginLoader找到插件没有问题?
【问题讨论】:
-
感谢您提出一个有趣的问题 - 我认为您正在探索的空间与当前使用插件的区域略有不同(但有共享区域)。我非常喜欢核心项目的想法,尽管它能够以某种方式为 ui 项目定义“合同” - 所以将其记录为一个想法 - github.com/MvvmCross/MvvmCross/issues/496