有点长篇大论……对不起。
我正在使用PartUpdatesInPlace中的示例并更改代码,以便在从 Extensions 路径中删除 Extensions1.dll 后重新加载它。
我在删除 Extensions1.dll 后设置了一个断点,更改Bar使其返回不同的字符串重新编译,然后刷新目录,希望当OnImportsStatisfied运行时,它会返回更新的字符串,但它没有。
按照原版,ShadowCopyAssembly 已启用。
/// setup catalogs and container and instance of BarWatcher
Console.WriteLine("Press enter to add a new bar");
Console.ReadLine();
//copy in a bar and refresh
File.Copy(BinDir + @"..\..\..\PartUpdatesInPlaceExtensions2\bin\debug\PartUpdatesInPlaceExtensions2.dll", ExtensionsPath + "Extensions2.dll");
directoryCatalog.Refresh();
Console.WriteLine("Press enter to remove the first bar");
Console.ReadLine();
//delete the original bar and refresh
File.Delete(ExtensionsPath + "Extensions1.dll");
directoryCatalog.Refresh();
//在Console.WriteLine("按回车键重新添加原条")下设置断点行;Console.ReadLine(); //复制到一个栏中并刷新 File.Copy(BinDir + @"......\PartUpdatesInPlaceExtensions\bin\debug\PartUpdatesInPlaceExtensions.dll", ExtensionsPath + "Extensions1.dll"); directoryCatalog.Refresh();
container.Compose(batch);
Console.ReadLine();
如果可以使这更简单,我可以将所有代码添加到存储库中。我的“Microsoft.Composition”版本是 1.0.20(从 Nuget 获得)
任何想法为什么会发生这种情况?
据我了解,重组应该发生,因为它已在BarWatcher中启用
[Export]
public class BarWatcher : IPartImportsSatisfiedNotification
{
[ImportMany(AllowRecomposition = true)]
public IEnumerable<IBar> Bars { get; set; }
public void OnImportsSatisfied()
{
if (Bars.Any())
{
foreach (var bar in Bars)
Console.WriteLine("bar-"+bar.Foo());
}
else
Console.WriteLine("No Bars present");
Console.WriteLine("\n");
}
}