MetadataReferenceProviderServiceFactory.cs 2.0 KB
Newer Older
1
// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
P
Pilchie 已提交
2

3
using System;
4 5
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Host.Mef;
P
Pilchie 已提交
6 7 8

namespace Microsoft.CodeAnalysis.Host
{
9
    [ExportWorkspaceServiceFactory(typeof(IMetadataReferenceProviderService), ServiceLayer.Default)]
10
    internal sealed class MetadataReferenceProviderServiceFactory : IWorkspaceServiceFactory
P
Pilchie 已提交
11
    {
12
        public IWorkspaceService CreateService(HostWorkspaceServices workspaceServices)
P
Pilchie 已提交
13
        {
14
            return new MetadataReferenceProviderService(workspaceServices);
P
Pilchie 已提交
15 16
        }

17
        private sealed class MetadataReferenceProviderService : IMetadataReferenceProviderService
P
Pilchie 已提交
18
        {
19 20 21 22 23 24 25
            private readonly HostWorkspaceServices workspaceServices;

            public MetadataReferenceProviderService(HostWorkspaceServices workspaceServices)
            {
                this.workspaceServices = workspaceServices;
            }

P
Pilchie 已提交
26 27
            public MetadataReferenceProvider GetProvider()
            {
28 29 30 31
                return new Provider(this.workspaceServices.GetService<IDocumentationProviderService>());
            }
        }

32 33
        // TODO: inherit directly from MetadataReferenceProvider when bug #797360 is fixed
        private sealed class Provider : MetadataFileReferenceProvider
34 35 36 37 38 39 40 41 42 43 44
        {
            private readonly IDocumentationProviderService documentationService;

            public Provider(IDocumentationProviderService documentationService)
            {
                this.documentationService = documentationService;
            }        

            public override PortableExecutableReference GetReference(string resolvedPath, MetadataReferenceProperties properties)
            {
                return new MetadataFileReference(resolvedPath, properties, this.documentationService.GetDocumentationProvider(resolvedPath));
P
Pilchie 已提交
45 46 47 48
            }
        }
    }
}