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));