{"record":{"id":"42fda3a6605e6335","repo":"stride3d/stride","slug":"argumentnullexception-dependencymanager","errorCode":null,"errorMessage":"ArgumentNullException: dependencyManager","messagePattern":"ArgumentNullException: dependencyManager","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"sources/editor/Stride.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs","lineNumber":28,"sourceCode":"using Stride.Core.Assets.Editor.ViewModel;\nusing Stride.Core.Assets.Quantum;\nusing Stride.Core.Annotations;\nusing Stride.Core.Extensions;\nusing Stride.Core.Presentation.Services;\nusing Stride.Core.Quantum;\nusing Stride.Core.Presentation.ViewModels;\n\nnamespace Stride.Core.Assets.Editor.Components.FixAssetReferences\n{\n    public class FixAssetReferencesViewModel : FixReferencesViewModel<AssetViewModel>\n    {\n        private readonly IAssetDependencyManager dependencyManager;\n        private readonly HashSet<AssetId> hashIds;\n\n        public FixAssetReferencesViewModel([NotNull] IViewModelServiceProvider serviceProvider, [ItemNotNull, NotNull] IEnumerable<AssetViewModel> deletedObjects, [NotNull] IAssetDependencyManager dependencyManager, [NotNull] IFixReferencesDialog dialog)\n            : base(serviceProvider, dialog)\n        {\n            if (dependencyManager == null) throw new ArgumentNullException(nameof(dependencyManager));\n            this.dependencyManager = dependencyManager;\n            hashIds = new HashSet<AssetId>();\n            hashIds.AddRange(deletedObjects.Select(x => x.Id));\n        }\n\n        protected override IEnumerable<KeyValuePair<object, List<AssetViewModel>>> FindReferencers(AssetViewModel deletedObject)\n        {\n            var session = deletedObject.Session;\n            var dependencies = dependencyManager.ComputeDependencies(deletedObject.AssetItem.Id, AssetDependencySearchOptions.In, ContentLinkType.Reference);\n            var referencers = dependencies?.LinksIn.Select(x => session.GetAssetById(x.Item.Id)).NotNull().Where(x => !hashIds.Contains(x.Id)).ToList() ?? new List<AssetViewModel>();\n            yield return new KeyValuePair<object, List<AssetViewModel>>(deletedObject, referencers);\n        }\n\n        protected override IEnumerable<ReferenceReplacementViewModel<AssetViewModel>> GetReplacementsForReferencer(AssetViewModel referencer, object referencedMember)\n        {\n            var rootNode = SessionViewModel.Instance.AssetNodeContainer.GetNode(referencer.Asset);\n            var visitor = new GraphVisitorBase { SkipRootNode = true };\n            var result = new List<ReferenceReplacementViewModel<AssetViewModel>>();","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/editor/Stride.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs#L10-L46","documentation":"FixAssetReferencesViewModel's constructor requires an IAssetDependencyManager and throws ArgumentNullException when it is null; the manager is stored and used to find assets referencing deleted objects.","triggerScenarios":"Constructing FixAssetReferencesViewModel(serviceProvider, deletedObjects, dependencyManager, dialog) with dependencyManager == null.","commonSituations":"The asset dependency service was not registered in the service provider / not resolved before opening the Fix Asset References view.","solutions":["Pass the active IAssetDependencyManager instance from the editor's session","Resolve the dependency manager via IServiceProvider before constructing","Register the dependency analysis service if it is missing"],"exampleFix":"// before\nnew FixAssetReferencesViewModel(serviceProvider, deleted, dependencyManager, dialog);\n// after\ndependencyManager ??= serviceProvider.Get<IAssetDependencyManager>();\nnew FixAssetReferencesViewModel(serviceProvider, deleted, dependencyManager, dialog);","handlingStrategy":"validation","validationCode":"dependencyManager ??= serviceProvider.Get<IAssetDependencyManager>();\nif (dependencyManager == null) throw new InvalidOperationException(\"IAssetDependencyManager not registered\");\nvar vm = new FixAssetReferencesViewModel(sp, deletedObjects, dependencyManager, dialog);","typeGuard":"static bool HasDependencyManager([NotNullWhen(true)] IAssetDependencyManager? m) => m is not null;","tryCatchPattern":"try { vm = new FixAssetReferencesViewModel(sp, deleted, mgr, dialog); } catch (ArgumentNullException ex) { logger.LogError(ex, \"Dependency manager missing\"); throw; }","preventionTips":["Register required services with the IViewModelServiceProvider before use","Resolve dependencies explicitly before constructing view models","Validate all [NotNull] constructor parameters in DI factories"],"tags":["null-argument","dependency-injection","viewmodel"],"backgroundTag":"null-argument","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}