Exemple #1
0
        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());
        }
Exemple #2
0
        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());
        }
Exemple #3
0
        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());
        }