我想在我的 XAP for Windows Phone 中包含另一个程序集而不直接引用它(如插件系统),因此我可以在运行时加载它并从中激活类型,但我找不到任何类型的引用。
我主要发现了有关如何加载它的问题,但如何(正确)包含它,不。
我想在我的 XAP for Windows Phone 中包含另一个程序集而不直接引用它(如插件系统),因此我可以在运行时加载它并从中激活类型,但我找不到任何类型的引用。
我主要发现了有关如何加载它的问题,但如何(正确)包含它,不。
您可以将已编译的程序集(.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);
不是很优雅,但我可以称之为解决方法。