public CompositionHost Build() { var options = _serviceProvider.GetRequiredService <IOptionsMonitor <OmniSharpOptions> >(); var memoryCache = _serviceProvider.GetRequiredService <IMemoryCache>(); var loggerFactory = _serviceProvider.GetRequiredService <ILoggerFactory>(); var assemblyLoader = _serviceProvider.GetRequiredService <IAssemblyLoader>(); var config = new ContainerConfiguration(); var assemblies = _assemblies .Concat(new[] { typeof(OmniSharpWorkspace).GetTypeInfo().Assembly, typeof(IRequest).GetTypeInfo().Assembly }) .Distinct(); config = config.WithAssemblies(assemblies); var fileSystemWatcher = new ManualFileSystemWatcher(); var metadataHelper = new MetadataHelper(assemblyLoader); config = config .WithProvider(MefValueProvider.From(_serviceProvider)) .WithProvider(MefValueProvider.From <IFileSystemWatcher>(fileSystemWatcher)) .WithProvider(MefValueProvider.From(memoryCache)) .WithProvider(MefValueProvider.From(loggerFactory)) .WithProvider(MefValueProvider.From(_environment)) .WithProvider(MefValueProvider.From(_writer)) .WithProvider(MefValueProvider.From(options.CurrentValue)) .WithProvider(MefValueProvider.From(options.CurrentValue.FormattingOptions)) .WithProvider(MefValueProvider.From(assemblyLoader)) .WithProvider(MefValueProvider.From(metadataHelper)) .WithProvider(MefValueProvider.From(_eventEmitter ?? NullEventEmitter.Instance)); return(config.CreateContainer()); }
public CompositionHost Build() { var options = _serviceProvider.GetRequiredService <IOptionsMonitor <OmniSharpOptions> >(); var memoryCache = _serviceProvider.GetRequiredService <IMemoryCache>(); var loggerFactory = _serviceProvider.GetRequiredService <ILoggerFactory>(); var assemblyLoader = _serviceProvider.GetRequiredService <IAssemblyLoader>(); var analyzerAssemblyLoader = _serviceProvider.GetRequiredService <IAnalyzerAssemblyLoader>(); var environment = _serviceProvider.GetRequiredService <IOmniSharpEnvironment>(); var eventEmitter = _serviceProvider.GetRequiredService <IEventEmitter>(); var dotNetCliService = _serviceProvider.GetRequiredService <IDotNetCliService>(); var config = new ContainerConfiguration(); var fileSystemWatcher = new ManualFileSystemWatcher(); var metadataHelper = new MetadataHelper(assemblyLoader); var logger = loggerFactory.CreateLogger <CompositionHostBuilder>(); // We must register an MSBuild instance before composing MEF to ensure that // our AssemblyResolve event is hooked up first. var msbuildLocator = _serviceProvider.GetRequiredService <IMSBuildLocator>(); // Don't register the default instance if an instance is already registered! // This is for tests, where the MSBuild instance may be registered early. if (msbuildLocator.RegisteredInstance == null) { msbuildLocator.RegisterDefaultInstance(logger); } config = config .WithProvider(MefValueProvider.From(_serviceProvider)) .WithProvider(MefValueProvider.From <IFileSystemNotifier>(fileSystemWatcher)) .WithProvider(MefValueProvider.From <IFileSystemWatcher>(fileSystemWatcher)) .WithProvider(MefValueProvider.From(memoryCache)) .WithProvider(MefValueProvider.From(loggerFactory)) .WithProvider(MefValueProvider.From(environment)) .WithProvider(MefValueProvider.From(options.CurrentValue)) .WithProvider(MefValueProvider.From(options.CurrentValue.FormattingOptions)) .WithProvider(MefValueProvider.From(assemblyLoader)) .WithProvider(MefValueProvider.From(analyzerAssemblyLoader)) .WithProvider(MefValueProvider.From(dotNetCliService)) .WithProvider(MefValueProvider.From(metadataHelper)) .WithProvider(MefValueProvider.From(msbuildLocator)) .WithProvider(MefValueProvider.From(eventEmitter)); foreach (var exportDescriptorProvider in _exportDescriptorProviders) { config = config.WithProvider(exportDescriptorProvider); } var parts = _assemblies .Concat(new[] { typeof(OmniSharpWorkspace).GetTypeInfo().Assembly, typeof(IRequest).GetTypeInfo().Assembly, typeof(FileSystemHelper).GetTypeInfo().Assembly }) .Distinct() .SelectMany(a => SafeGetTypes(a)) .ToArray(); config = config.WithParts(parts); return(config.CreateContainer()); }
public static CompositionHost CreateCompositionHost(IServiceProvider serviceProvider, OmniSharpOptions options, IEnumerable <Assembly> assemblies) { var config = new ContainerConfiguration(); assemblies = assemblies .Concat(new[] { typeof(OmniSharpWorkspace).GetTypeInfo().Assembly, typeof(IRequest).GetTypeInfo().Assembly }) .Distinct(); foreach (var assembly in assemblies) { config = config.WithAssembly(assembly); } var memoryCache = serviceProvider.GetService <IMemoryCache>(); var loggerFactory = serviceProvider.GetService <ILoggerFactory>(); var env = serviceProvider.GetService <IOmniSharpEnvironment>(); var writer = serviceProvider.GetService <ISharedTextWriter>(); var loader = serviceProvider.GetService <IAssemblyLoader>(); var fileSystemWatcher = new ManualFileSystemWatcher(); var metadataHelper = new MetadataHelper(loader); config = config .WithProvider(MefValueProvider.From(serviceProvider)) .WithProvider(MefValueProvider.From <IFileSystemWatcher>(fileSystemWatcher)) .WithProvider(MefValueProvider.From(memoryCache)) .WithProvider(MefValueProvider.From(loggerFactory)) .WithProvider(MefValueProvider.From(env)) .WithProvider(MefValueProvider.From(writer)) .WithProvider(MefValueProvider.From(options)) .WithProvider(MefValueProvider.From(options.FormattingOptions)) .WithProvider(MefValueProvider.From(loader)) .WithProvider(MefValueProvider.From(metadataHelper)); if (env.TransportType == TransportType.Stdio) { config = config .WithProvider(MefValueProvider.From <IEventEmitter>(new StdioEventEmitter(writer))); } else { config = config .WithProvider(MefValueProvider.From(NullEventEmitter.Instance)); } return(config.CreateContainer()); }
public CompositionHost Build() { var options = _serviceProvider.GetRequiredService <IOptionsMonitor <OmniSharpOptions> >(); var memoryCache = _serviceProvider.GetRequiredService <IMemoryCache>(); var loggerFactory = _serviceProvider.GetRequiredService <ILoggerFactory>(); var assemblyLoader = _serviceProvider.GetRequiredService <IAssemblyLoader>(); var config = new ContainerConfiguration(); var fileSystemWatcher = new ManualFileSystemWatcher(); var metadataHelper = new MetadataHelper(assemblyLoader); var logger = loggerFactory.CreateLogger <CompositionHostBuilder>(); // We must register an MSBuild instance before composing MEF to ensure that // our AssemblyResolve event is hooked up first. var msbuildLocator = _serviceProvider.GetRequiredService <IMSBuildLocator>(); RegisterMSBuildInstance(msbuildLocator, logger); config = config .WithProvider(MefValueProvider.From(_serviceProvider)) .WithProvider(MefValueProvider.From <IFileSystemNotifier>(fileSystemWatcher)) .WithProvider(MefValueProvider.From <IFileSystemWatcher>(fileSystemWatcher)) .WithProvider(MefValueProvider.From(memoryCache)) .WithProvider(MefValueProvider.From(loggerFactory)) .WithProvider(MefValueProvider.From(_environment)) .WithProvider(MefValueProvider.From(_writer)) .WithProvider(MefValueProvider.From(options.CurrentValue)) .WithProvider(MefValueProvider.From(options.CurrentValue.FormattingOptions)) .WithProvider(MefValueProvider.From(assemblyLoader)) .WithProvider(MefValueProvider.From(metadataHelper)) .WithProvider(MefValueProvider.From(msbuildLocator)) .WithProvider(MefValueProvider.From(_eventEmitter ?? NullEventEmitter.Instance)); var parts = _assemblies .Concat(new[] { typeof(OmniSharpWorkspace).GetTypeInfo().Assembly, typeof(IRequest).GetTypeInfo().Assembly }) .Distinct() .SelectMany(a => SafeGetTypes(a)) .ToArray(); config = config.WithParts(parts); return(config.CreateContainer()); }