diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs index 9ed0ab5dcf..5ec01ee4c8 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs @@ -2,10 +2,10 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Razor; namespace Microsoft.VisualStudio.Editor.Razor { @@ -18,7 +18,26 @@ namespace Microsoft.VisualStudio.Editor.Razor [ImportingConstructor] public DefaultCodeDocumentProvider( - RazorTextBufferProvider bufferProvider, + RazorTextBufferProvider bufferProvider, + VisualStudioWorkspaceAccessor workspaceAccessor) + { + if (bufferProvider == null) + { + throw new ArgumentNullException(nameof(bufferProvider)); + } + + if (workspaceAccessor == null) + { + throw new ArgumentNullException(nameof(workspaceAccessor)); + } + + _bufferProvider = bufferProvider; + _codeDocumentProvider = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name).GetRequiredService(); + } + + // Internal for testing + internal DefaultCodeDocumentProvider( + RazorTextBufferProvider bufferProvider, TextBufferCodeDocumentProvider codeDocumentProvider) { if (bufferProvider == null) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs index a9df7a9c45..45bd21d7d2 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs @@ -2,14 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.ComponentModel.Composition; using Microsoft.AspNetCore.Razor.Language; using Microsoft.VisualStudio.Text; namespace Microsoft.VisualStudio.Editor.Razor { - [System.Composition.Shared] - [Export(typeof(TextBufferCodeDocumentProvider))] internal class DefaultTextBufferCodeDocumentProvider : TextBufferCodeDocumentProvider { public override bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs new file mode 100644 index 0000000000..964ecc6dd6 --- /dev/null +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs @@ -0,0 +1,18 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.CodeAnalysis.Host; +using Microsoft.CodeAnalysis.Host.Mef; +using Microsoft.CodeAnalysis.Razor; + +namespace Microsoft.VisualStudio.Editor.Razor +{ + [ExportLanguageServiceFactory(typeof(TextBufferCodeDocumentProvider), RazorLanguage.Name, ServiceLayer.Default)] + internal class DefaultTextBufferCodeDocumentProviderFactory : ILanguageServiceFactory + { + public ILanguageService CreateLanguageService(HostLanguageServices languageServices) + { + return new DefaultTextBufferCodeDocumentProvider(); + } + } +} \ No newline at end of file diff --git a/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs index 87cf733246..42e50db4fa 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs @@ -7,7 +7,7 @@ using Microsoft.VisualStudio.Text; namespace Microsoft.VisualStudio.Editor.Razor { - internal abstract class TextBufferCodeDocumentProvider + internal abstract class TextBufferCodeDocumentProvider : ILanguageService { public abstract bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument); }