Change ForegroundDispatcher to be a MEF service.

- The `ForegroundDispatcher` needed to be accessible by services without requiring a workspace; given that it doesn't have any ties to the `Workspace` other than being a service of one I was able to move it into a MEF service.
- Updated all workspace inclusions of the dispatcher to use importing constructors instead.
- Updated the Mac + Windows implementations to be exported as MEF pieces.

#1979
This commit is contained in:
N. Taylor Mullen 2018-01-26 15:14:57 -08:00
parent 004ff204aa
commit 84bc0fa4c9
15 changed files with 135 additions and 37 deletions

View File

@ -12,6 +12,19 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
[ExportLanguageServiceFactory(typeof(EditorSettingsManagerInternal), RazorLanguage.Name)] [ExportLanguageServiceFactory(typeof(EditorSettingsManagerInternal), RazorLanguage.Name)]
internal class DefaultEditorSettingsManagerInternalFactory : ILanguageServiceFactory internal class DefaultEditorSettingsManagerInternalFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor]
public DefaultEditorSettingsManagerInternalFactory(ForegroundDispatcher foregroundDispatcher)
{
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
_foregroundDispatcher = foregroundDispatcher;
}
public ILanguageService CreateLanguageService(HostLanguageServices languageServices) public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
{ {
if (languageServices == null) if (languageServices == null)
@ -19,9 +32,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var foregroundDispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>(); return new DefaultEditorSettingsManagerInternal(_foregroundDispatcher);
return new DefaultEditorSettingsManagerInternal(foregroundDispatcher);
} }
} }
} }

View File

@ -8,7 +8,7 @@ using Microsoft.CodeAnalysis.Host;
namespace Microsoft.CodeAnalysis.Razor namespace Microsoft.CodeAnalysis.Razor
{ {
internal abstract class ForegroundDispatcher : IWorkspaceService internal abstract class ForegroundDispatcher
{ {
public abstract bool IsForegroundThread { get; } public abstract bool IsForegroundThread { get; }

View File

@ -14,11 +14,24 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
internal class DefaultProjectSnapshotManagerFactory : ILanguageServiceFactory internal class DefaultProjectSnapshotManagerFactory : ILanguageServiceFactory
{ {
private readonly IEnumerable<ProjectSnapshotChangeTrigger> _triggers; private readonly IEnumerable<ProjectSnapshotChangeTrigger> _triggers;
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor] [ImportingConstructor]
public DefaultProjectSnapshotManagerFactory( public DefaultProjectSnapshotManagerFactory(
ForegroundDispatcher foregroundDispatcher,
[ImportMany] IEnumerable<ProjectSnapshotChangeTrigger> triggers) [ImportMany] IEnumerable<ProjectSnapshotChangeTrigger> triggers)
{ {
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
if (triggers == null)
{
throw new ArgumentNullException(nameof(triggers));
}
_foregroundDispatcher = foregroundDispatcher;
_triggers = triggers; _triggers = triggers;
} }
@ -30,7 +43,7 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
} }
return new DefaultProjectSnapshotManager( return new DefaultProjectSnapshotManager(
languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>(), _foregroundDispatcher,
languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>(), languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>(),
languageServices.GetRequiredService<ProjectSnapshotWorker>(), languageServices.GetRequiredService<ProjectSnapshotWorker>(),
_triggers, _triggers,

View File

@ -11,10 +11,23 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
[ExportLanguageServiceFactory(typeof(ProjectSnapshotWorker), RazorLanguage.Name)] [ExportLanguageServiceFactory(typeof(ProjectSnapshotWorker), RazorLanguage.Name)]
internal class DefaultProjectSnapshotWorkerFactory : ILanguageServiceFactory internal class DefaultProjectSnapshotWorkerFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor]
public DefaultProjectSnapshotWorkerFactory(ForegroundDispatcher foregroundDispatcher)
{
if (foregroundDispatcher == null)
{
throw new System.ArgumentNullException(nameof(foregroundDispatcher));
}
_foregroundDispatcher = foregroundDispatcher;
}
public ILanguageService CreateLanguageService(HostLanguageServices languageServices) public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
{ {
return new DefaultProjectSnapshotWorker( return new DefaultProjectSnapshotWorker(
languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>(), _foregroundDispatcher,
languageServices.GetRequiredService<ProjectExtensibilityConfigurationFactory>(), languageServices.GetRequiredService<ProjectExtensibilityConfigurationFactory>(),
languageServices.GetRequiredService<TagHelperResolver>()); languageServices.GetRequiredService<TagHelperResolver>());
} }

View File

@ -14,16 +14,23 @@ namespace Microsoft.VisualStudio.Editor.Razor
[ExportLanguageServiceFactory(typeof(BraceSmartIndenterFactory), RazorLanguage.Name, ServiceLayer.Default)] [ExportLanguageServiceFactory(typeof(BraceSmartIndenterFactory), RazorLanguage.Name, ServiceLayer.Default)]
internal class DefaultBraceSmartIndenterFactoryFactory : ILanguageServiceFactory internal class DefaultBraceSmartIndenterFactoryFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
private readonly IEditorOperationsFactoryService _editorOperationsFactory; private readonly IEditorOperationsFactoryService _editorOperationsFactory;
[ImportingConstructor] [ImportingConstructor]
public DefaultBraceSmartIndenterFactoryFactory(IEditorOperationsFactoryService editorOperationsFactory) public DefaultBraceSmartIndenterFactoryFactory(ForegroundDispatcher foregroundDispatcher, IEditorOperationsFactoryService editorOperationsFactory)
{ {
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
if (editorOperationsFactory == null) if (editorOperationsFactory == null)
{ {
throw new ArgumentNullException(nameof(editorOperationsFactory)); throw new ArgumentNullException(nameof(editorOperationsFactory));
} }
_foregroundDispatcher = foregroundDispatcher;
_editorOperationsFactory = editorOperationsFactory; _editorOperationsFactory = editorOperationsFactory;
} }
@ -34,8 +41,7 @@ namespace Microsoft.VisualStudio.Editor.Razor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var dispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>(); return new DefaultBraceSmartIndenterFactory(_foregroundDispatcher, _editorOperationsFactory);
return new DefaultBraceSmartIndenterFactory(dispatcher, _editorOperationsFactory);
} }
} }
} }

View File

@ -13,6 +13,19 @@ namespace Microsoft.VisualStudio.Editor.Razor
[ExportLanguageServiceFactory(typeof(ImportDocumentManager), RazorLanguage.Name, ServiceLayer.Default)] [ExportLanguageServiceFactory(typeof(ImportDocumentManager), RazorLanguage.Name, ServiceLayer.Default)]
internal class DefaultImportDocumentManagerFactory : ILanguageServiceFactory internal class DefaultImportDocumentManagerFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor]
public DefaultImportDocumentManagerFactory(ForegroundDispatcher foregroundDispatcher)
{
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
_foregroundDispatcher = foregroundDispatcher;
}
public ILanguageService CreateLanguageService(HostLanguageServices languageServices) public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
{ {
if (languageServices == null) if (languageServices == null)
@ -20,13 +33,12 @@ namespace Microsoft.VisualStudio.Editor.Razor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var dispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>();
var errorReporter = languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>(); var errorReporter = languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>();
var fileChangeTrackerFactory = languageServices.GetRequiredService<FileChangeTrackerFactory>(); var fileChangeTrackerFactory = languageServices.GetRequiredService<FileChangeTrackerFactory>();
var templateEngineFactoryService = languageServices.GetRequiredService<RazorTemplateEngineFactoryService>(); var templateEngineFactoryService = languageServices.GetRequiredService<RazorTemplateEngineFactoryService>();
return new DefaultImportDocumentManager( return new DefaultImportDocumentManager(
dispatcher, _foregroundDispatcher,
errorReporter, errorReporter,
fileChangeTrackerFactory, fileChangeTrackerFactory,
templateEngineFactoryService); templateEngineFactoryService);

View File

@ -13,16 +13,23 @@ namespace Microsoft.VisualStudio.Editor.Razor
[ExportLanguageServiceFactory(typeof(RazorDocumentManager), RazorLanguage.Name, ServiceLayer.Default)] [ExportLanguageServiceFactory(typeof(RazorDocumentManager), RazorLanguage.Name, ServiceLayer.Default)]
internal class DefaultRazorDocumentManagerFactory : ILanguageServiceFactory internal class DefaultRazorDocumentManagerFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
private readonly RazorEditorFactoryService _editorFactoryService; private readonly RazorEditorFactoryService _editorFactoryService;
[ImportingConstructor] [ImportingConstructor]
public DefaultRazorDocumentManagerFactory(RazorEditorFactoryService editorFactoryService) public DefaultRazorDocumentManagerFactory(ForegroundDispatcher foregroundDispatcher, RazorEditorFactoryService editorFactoryService)
{ {
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
if (editorFactoryService == null) if (editorFactoryService == null)
{ {
throw new ArgumentNullException(nameof(editorFactoryService)); throw new ArgumentNullException(nameof(editorFactoryService));
} }
_foregroundDispatcher = foregroundDispatcher;
_editorFactoryService = editorFactoryService; _editorFactoryService = editorFactoryService;
} }
@ -33,10 +40,9 @@ namespace Microsoft.VisualStudio.Editor.Razor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var dispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>();
var projectService = languageServices.GetRequiredService<TextBufferProjectService>(); var projectService = languageServices.GetRequiredService<TextBufferProjectService>();
return new DefaultRazorDocumentManager(dispatcher, _editorFactoryService, projectService); return new DefaultRazorDocumentManager(_foregroundDispatcher, _editorFactoryService, projectService);
} }
} }
} }

View File

@ -16,16 +16,23 @@ namespace Microsoft.VisualStudio.Editor.Razor
[ExportLanguageServiceFactory(typeof(VisualStudioDocumentTrackerFactory), RazorLanguage.Name, ServiceLayer.Default)] [ExportLanguageServiceFactory(typeof(VisualStudioDocumentTrackerFactory), RazorLanguage.Name, ServiceLayer.Default)]
internal class DefaultVisualStudioDocumentTrackerFactoryFactory : ILanguageServiceFactory internal class DefaultVisualStudioDocumentTrackerFactoryFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
private readonly ITextDocumentFactoryService _textDocumentFactory; private readonly ITextDocumentFactoryService _textDocumentFactory;
[ImportingConstructor] [ImportingConstructor]
public DefaultVisualStudioDocumentTrackerFactoryFactory(ITextDocumentFactoryService textDocumentFactory) public DefaultVisualStudioDocumentTrackerFactoryFactory(ForegroundDispatcher foregroundDispatcher, ITextDocumentFactoryService textDocumentFactory)
{ {
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
if (textDocumentFactory == null) if (textDocumentFactory == null)
{ {
throw new ArgumentNullException(nameof(textDocumentFactory)); throw new ArgumentNullException(nameof(textDocumentFactory));
} }
_foregroundDispatcher = foregroundDispatcher;
_textDocumentFactory = textDocumentFactory; _textDocumentFactory = textDocumentFactory;
} }
@ -36,14 +43,13 @@ namespace Microsoft.VisualStudio.Editor.Razor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var dispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>();
var projectManager = languageServices.GetRequiredService<ProjectSnapshotManager>(); var projectManager = languageServices.GetRequiredService<ProjectSnapshotManager>();
var editorSettingsManager = languageServices.GetRequiredService<EditorSettingsManagerInternal>(); var editorSettingsManager = languageServices.GetRequiredService<EditorSettingsManagerInternal>();
var projectService = languageServices.GetRequiredService<TextBufferProjectService>(); var projectService = languageServices.GetRequiredService<TextBufferProjectService>();
var importDocumentManager = languageServices.GetRequiredService<ImportDocumentManager>(); var importDocumentManager = languageServices.GetRequiredService<ImportDocumentManager>();
return new DefaultVisualStudioDocumentTrackerFactory( return new DefaultVisualStudioDocumentTrackerFactory(
dispatcher, _foregroundDispatcher,
projectManager, projectManager,
editorSettingsManager, editorSettingsManager,
projectService, projectService,

View File

@ -13,6 +13,18 @@ namespace Microsoft.VisualStudio.Editor.Razor
[ExportLanguageServiceFactory(typeof(VisualStudioRazorParserFactory), RazorLanguage.Name, ServiceLayer.Default)] [ExportLanguageServiceFactory(typeof(VisualStudioRazorParserFactory), RazorLanguage.Name, ServiceLayer.Default)]
internal class DefaultVisualStudioRazorParserFactoryFactory : ILanguageServiceFactory internal class DefaultVisualStudioRazorParserFactoryFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor]
public DefaultVisualStudioRazorParserFactoryFactory(ForegroundDispatcher foregroundDispatcher)
{
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
_foregroundDispatcher = foregroundDispatcher;
}
public ILanguageService CreateLanguageService(HostLanguageServices languageServices) public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
{ {
if (languageServices == null) if (languageServices == null)
@ -21,13 +33,12 @@ namespace Microsoft.VisualStudio.Editor.Razor
} }
var workspaceServices = languageServices.WorkspaceServices; var workspaceServices = languageServices.WorkspaceServices;
var dispatcher = workspaceServices.GetRequiredService<ForegroundDispatcher>();
var errorReporter = workspaceServices.GetRequiredService<ErrorReporter>(); var errorReporter = workspaceServices.GetRequiredService<ErrorReporter>();
var completionBroker = languageServices.GetRequiredService<VisualStudioCompletionBroker>(); var completionBroker = languageServices.GetRequiredService<VisualStudioCompletionBroker>();
var templateEngineFactoryService = languageServices.GetRequiredService<RazorTemplateEngineFactoryService>(); var templateEngineFactoryService = languageServices.GetRequiredService<RazorTemplateEngineFactoryService>();
return new DefaultVisualStudioRazorParserFactory( return new DefaultVisualStudioRazorParserFactory(
dispatcher, _foregroundDispatcher,
errorReporter, errorReporter,
completionBroker, completionBroker,
templateEngineFactoryService); templateEngineFactoryService);

View File

@ -20,14 +20,14 @@ namespace Microsoft.VisualStudio.Editor.Razor
private readonly RazorDocumentManager _documentManager; private readonly RazorDocumentManager _documentManager;
[ImportingConstructor] [ImportingConstructor]
public RazorTextViewConnectionListener(VisualStudioWorkspaceAccessor workspaceAccessor) public RazorTextViewConnectionListener(ForegroundDispatcher foregroundDispatcher, VisualStudioWorkspaceAccessor workspaceAccessor)
{ {
if (workspaceAccessor == null) if (workspaceAccessor == null)
{ {
throw new ArgumentNullException(nameof(workspaceAccessor)); throw new ArgumentNullException(nameof(workspaceAccessor));
} }
_foregroundDispatcher = workspaceAccessor.Workspace.Services.GetRequiredService<ForegroundDispatcher>(); _foregroundDispatcher = foregroundDispatcher;
var languageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name); var languageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name);
_documentManager = languageServices.GetRequiredService<RazorDocumentManager>(); _documentManager = languageServices.GetRequiredService<RazorDocumentManager>();

View File

@ -17,15 +17,22 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
internal class DefaultFileChangeTrackerFactoryFactory : ILanguageServiceFactory internal class DefaultFileChangeTrackerFactoryFactory : ILanguageServiceFactory
{ {
private readonly IVsFileChangeEx _fileChangeService; private readonly IVsFileChangeEx _fileChangeService;
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor] [ImportingConstructor]
public DefaultFileChangeTrackerFactoryFactory(SVsServiceProvider serviceProvider) public DefaultFileChangeTrackerFactoryFactory(ForegroundDispatcher foregroundDispatcher, SVsServiceProvider serviceProvider)
{ {
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
if (serviceProvider == null) if (serviceProvider == null)
{ {
throw new ArgumentNullException(nameof(serviceProvider)); throw new ArgumentNullException(nameof(serviceProvider));
} }
_foregroundDispatcher = foregroundDispatcher;
_fileChangeService = serviceProvider.GetService(typeof(SVsFileChangeEx)) as IVsFileChangeEx; _fileChangeService = serviceProvider.GetService(typeof(SVsFileChangeEx)) as IVsFileChangeEx;
} }
@ -36,9 +43,8 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var foregroundDispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>();
var errorReporter = languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>(); var errorReporter = languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>();
return new DefaultFileChangeTrackerFactory(foregroundDispatcher, errorReporter, _fileChangeService); return new DefaultFileChangeTrackerFactory(_foregroundDispatcher, errorReporter, _fileChangeService);
} }
} }
} }

View File

@ -1,16 +1,15 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Composition; using System.ComponentModel.Composition;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor;
using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell;
namespace Microsoft.VisualStudio.LanguageServices.Razor namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
[Shared] [System.Composition.Shared]
[ExportWorkspaceService(typeof(ForegroundDispatcher), ServiceLayer.Host)] [Export(typeof(ForegroundDispatcher))]
internal class VisualStudioForegroundDispatcher : ForegroundDispatcher internal class VisualStudioForegroundDispatcher : ForegroundDispatcher
{ {
public override TaskScheduler BackgroundScheduler { get; } = TaskScheduler.Default; public override TaskScheduler BackgroundScheduler { get; } = TaskScheduler.Default;

View File

@ -14,6 +14,19 @@ namespace Microsoft.VisualStudio.Mac.LanguageServices.Razor
[ExportLanguageServiceFactory(typeof(FileChangeTrackerFactory), RazorLanguage.Name, ServiceLayer.Default)] [ExportLanguageServiceFactory(typeof(FileChangeTrackerFactory), RazorLanguage.Name, ServiceLayer.Default)]
internal class DefaultFileChangeTrackerFactoryFactory : ILanguageServiceFactory internal class DefaultFileChangeTrackerFactoryFactory : ILanguageServiceFactory
{ {
private readonly ForegroundDispatcher _foregroundDispatcher;
[ImportingConstructor]
public DefaultFileChangeTrackerFactoryFactory(ForegroundDispatcher foregroundDispatcher)
{
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
_foregroundDispatcher = foregroundDispatcher;
}
public ILanguageService CreateLanguageService(HostLanguageServices languageServices) public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
{ {
if (languageServices == null) if (languageServices == null)
@ -21,9 +34,7 @@ namespace Microsoft.VisualStudio.Mac.LanguageServices.Razor
throw new ArgumentNullException(nameof(languageServices)); throw new ArgumentNullException(nameof(languageServices));
} }
var foregroundDispatcher = languageServices.WorkspaceServices.GetRequiredService<ForegroundDispatcher>(); return new DefaultFileChangeTrackerFactory(_foregroundDispatcher);
var errorReporter = languageServices.WorkspaceServices.GetRequiredService<ErrorReporter>();
return new DefaultFileChangeTrackerFactory(foregroundDispatcher);
} }
} }
} }

View File

@ -19,14 +19,19 @@ namespace Microsoft.VisualStudio.Mac.LanguageServices.Razor
private ProjectSnapshotManagerBase _projectManager; private ProjectSnapshotManagerBase _projectManager;
[ImportingConstructor] [ImportingConstructor]
public ProjectBuildChangeTrigger(VisualStudioWorkspaceAccessor workspaceAccessor) public ProjectBuildChangeTrigger(ForegroundDispatcher foregroundDispatcher, VisualStudioWorkspaceAccessor workspaceAccessor)
{ {
if (foregroundDispatcher == null)
{
throw new ArgumentNullException(nameof(foregroundDispatcher));
}
if (workspaceAccessor == null) if (workspaceAccessor == null)
{ {
throw new ArgumentNullException(nameof(workspaceAccessor)); throw new ArgumentNullException(nameof(workspaceAccessor));
} }
_foregroundDispatcher = workspaceAccessor.Workspace.Services.GetRequiredService<ForegroundDispatcher>(); _foregroundDispatcher = foregroundDispatcher;
var languageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name); var languageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name);
_projectService = languageServices.GetRequiredService<TextBufferProjectService>(); _projectService = languageServices.GetRequiredService<TextBufferProjectService>();

View File

@ -1,15 +1,14 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Composition; using System.ComponentModel.Composition;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor;
namespace Microsoft.VisualStudio.Mac.LanguageServices.Razor namespace Microsoft.VisualStudio.Mac.LanguageServices.Razor
{ {
[Shared] [System.Composition.Shared]
[ExportWorkspaceService(typeof(ForegroundDispatcher), ServiceLayer.Host)] [Export(typeof(ForegroundDispatcher))]
internal class VisualStudioForegroundDispatcher : ForegroundDispatcher internal class VisualStudioForegroundDispatcher : ForegroundDispatcher
{ {
public override TaskScheduler BackgroundScheduler { get; } = TaskScheduler.Default; public override TaskScheduler BackgroundScheduler { get; } = TaskScheduler.Default;