C# 一旦构造函数完成,对象就会消失
我怀疑这种行为有一个术语,如果我知道它,我可以在谷歌上搜索它,了解我需要什么。然而,我不知道 这是我的构造函数:C# 一旦构造函数完成,对象就会消失,c#,mef,C#,Mef,我怀疑这种行为有一个术语,如果我知道它,我可以在谷歌上搜索它,了解我需要什么。然而,我不知道 这是我的构造函数: [Export(typeof(MainWindowViewModel))] public class MainWindowViewModel : ObservableObject { private readonly IProductService _productService; private readonly IProfileService _profileSe
[Export(typeof(MainWindowViewModel))]
public class MainWindowViewModel : ObservableObject
{
private readonly IProductService _productService;
private readonly IProfileService _profileService;
public IEnumerable<ProductViewModel> Products { get; private set; }
private ProductViewModel _productSelected;
[ImportingConstructor]
public MainWindowViewModel(IProductService productService, IProfileService profileService, ILoggingService logger)
{
Products = _productService.InstalledProducts.Select(p => new ProductViewModel(p, _profileService, _logger));
SelectTheProductInDirectoryRunningFrom();
_productSelected.Load();
}
protected virtual void SelectTheProductInDirectoryRunningFrom()
{
string currentDir = Directory.GetCurrentDirectory();
if (_productSelected != null && _productSelected.InstalledPath != null &&
!_productSelected.InstalledPath.Contains(currentDir))
{
_productSelected =
Products.Where(p => currentDir.Contains(p.InstalledPath)).Select(p => p).DefaultIfEmpty(
_productSelected).SingleOrDefault();
}
}
当我在VisualStudio调试器中单步执行此代码时,所有内容都会执行,并且\u profiles
和profiles
都被正确分配到了。但是,当执行从MainWindowViewModel
构造函数返回时,\u profiles
和profiles
都为空
我按F11两次到达这里:
出了什么问题?我的对象是否超出了范围?我想这可能与价值和参考有关,但我找不到任何东西。谢谢 从
分配给对象,其中SelectEnumerableTerator
创建一个新对象,因此原始列表不会被更新
_productSelected =
Products.Where(p => currentDir.Contains(p.InstalledPath)).Select(p => p).DefaultIfEmpty(
_productSelected).SingleOrDefault();
我在这个调用中添加了一个.ToList()
Products = _productService.InstalledProducts.Select(p => new ProductViewModel(p, _profileService, _logger));
强制
IEnumerable
进入列表
,该列表不会创建新对象,并且会更新现有对象。谢谢@Igor。可能是因为您显然使用了类字段(例如\u productService
)而不是传递给构造函数的参数(例如\u productService
)?调试器触发的是延迟执行,而不是在执行过程中触发的吗?您需要向我们展示代码上下文中的声明。@rbaryyoung这是怎么回事?我遗漏了什么吗?Profiles声明在哪里?@DStanley在执行从构造函数返回后,调试器中它们都为空。I inspec在Load()
中输入它们,并将它们分配给。我按F11几次,它们突然变为空。
Products = _productService.InstalledProducts.Select(p => new ProductViewModel(p, _profileService, _logger));