Files

118 lines
4.8 KiB
C#
Raw Permalink Normal View History

2024-01-08 09:30:50 +08:00
using System;
using System.Collections.Generic;
using KGdev.BI3D.Revit.Common;
using KGdev.BI3D.Revit.DataExporter.JsonTable;
using KGdev.BI3D.Revit.ExporterV2;
using KGdev.BI3D.Revit.Implementations;
using Microsoft.Extensions.DependencyInjection;
namespace KGdev.BI3D.Revit
{
public class Extension
{
public static Extension Instance
{
get
{
object obj = Extension.instanceLock;
Extension extension;
lock (obj)
{
if (Extension.instance == null)
{
Extension.instance = new Extension();
}
extension = Extension.instance;
}
return extension;
}
}
public IServiceProvider ServiceProvider { get; private set; }
private Extension()
{
this.ServiceProvider = this.BuildServiceProvider();
}
private IServiceProvider BuildServiceProvider()
{
ServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddTransient<IBI3DViewsProvider, DefaultBI3DViewsProvider>(
(IServiceProvider _) => new DefaultBI3DViewsProvider()
);
serviceCollection.AddTransient<IElementIdProvider, DefaultElementIdProvider>(
(IServiceProvider _) => new DefaultElementIdProvider()
);
serviceCollection.AddTransient<
ILinkedDocumentsUtilities,
DefaultLinkedDocumentUtilities
>((IServiceProvider _) => new DefaultLinkedDocumentUtilities());
serviceCollection.AddTransient<IExporter, Exporter>(
(IServiceProvider provider) =>
{
IBI3DViewsProvider requiredService =
provider.GetRequiredService<IBI3DViewsProvider>();
IElementIdProvider requiredService2 =
provider.GetRequiredService<IElementIdProvider>();
IGlobalStore requiredService3 = provider.GetRequiredService<IGlobalStore>();
ILinkedDocumentsUtilities requiredService4 =
provider.GetRequiredService<ILinkedDocumentsUtilities>();
//IAuthProvider requiredService5 = provider.GetRequiredService<IAuthProvider>();
IElementIdProvider requiredService6 =
provider.GetRequiredService<IElementIdProvider>();
return new Exporter(
requiredService,
requiredService3,
requiredService4,
//requiredService5,
requiredService6
);
}
);
serviceCollection.AddTransient(
(IServiceProvider provider) =>
{
ILinkedDocumentsUtilities requiredService7 =
provider.GetRequiredService<ILinkedDocumentsUtilities>();
IElementIdProvider requiredService8 =
provider.GetRequiredService<IElementIdProvider>();
return new List<IDataExporter>
{
new JsonTableDataExporter(requiredService7, requiredService8)
};
}
);
serviceCollection.AddTransient<IGlobalStore, DefaultGlobalStore>(
(IServiceProvider _) => new DefaultGlobalStore()
);
serviceCollection.AddTransient<IMuidProvider, DefaultMuidProvider>(
(IServiceProvider _) => new DefaultMuidProvider()
);
serviceCollection.AddTransient<IConstantsProvider, DefaultConstantsProvider>(
(IServiceProvider _) => new DefaultConstantsProvider()
);
//serviceCollection.AddTransient<IAuthProvider, DefaultAuthProvider>(
// (IServiceProvider provider) =>
// {
// IMuidProvider requiredService9 = provider.GetRequiredService<IMuidProvider>();
// IConstantsProvider requiredService10 =
// provider.GetRequiredService<IConstantsProvider>();
// IGlobalStore requiredService11 = provider.GetRequiredService<IGlobalStore>();
// return new DefaultAuthProvider(
// requiredService10.ProductId,
// requiredService9,
// requiredService11
// );
// }
//);
return serviceCollection.BuildServiceProvider();
}
private static Extension instance;
private static object instanceLock = new object();
}
}