3

我想在我的 XAP for Windows Phone 中包含另一个程序集而不直接引用它(如插件系统),因此我可以在运行时加载它并从中激活类型,但我找不到任何类型的引用。

我主要发现了有关如何加载它的问题,但如何(正确)包含它,不。

4

1 回答 1

2

您可以将已编译的程序集(.dll 文件)添加到您的 WP8 项目并将文件构建操作设置为“内容”。然后你可以尝试这样加载它:

var folder = await StorageFolder.GetFolderFromPathAsync(Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "Plugins", "Services"));
var files = await folder.GetFilesAsync();
var firstFile = files.FirstOrDefault();
var assy = Assembly.LoadFrom(firstFile.Path);

但是 Assembly.LoadFrom 将失败,因为它不受支持。您仍然可以使用它来加载其他二进制内容,但不能加载代码。

您所能做的就是引用所有“插件”或您可能需要的任何程序集,而不是直接引用这些程序集中的任何类型。“引用程序集”是指右键单击引用(在 WP8 项目中)和“添加引用...”。

然后你可以这样做:

var assy = Assembly.Load("MyCompany.MyProject.WhateverAssembly");
var tp = typeof(IService);
var x = ass.GetTypes().Where(t => t.IsClass && tp.IsAssignableFrom(t)).SingleOrDefault();
Activator.CreateInstance(x);

不是很优雅,但我可以称之为解决方法。

于 2013-07-14T19:19:17.130 回答