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( (IServiceProvider _) => new DefaultBI3DViewsProvider() ); serviceCollection.AddTransient( (IServiceProvider _) => new DefaultElementIdProvider() ); serviceCollection.AddTransient< ILinkedDocumentsUtilities, DefaultLinkedDocumentUtilities >((IServiceProvider _) => new DefaultLinkedDocumentUtilities()); serviceCollection.AddTransient( (IServiceProvider provider) => { IBI3DViewsProvider requiredService = provider.GetRequiredService(); IElementIdProvider requiredService2 = provider.GetRequiredService(); IGlobalStore requiredService3 = provider.GetRequiredService(); ILinkedDocumentsUtilities requiredService4 = provider.GetRequiredService(); //IAuthProvider requiredService5 = provider.GetRequiredService(); IElementIdProvider requiredService6 = provider.GetRequiredService(); return new Exporter( requiredService, requiredService3, requiredService4, //requiredService5, requiredService6 ); } ); serviceCollection.AddTransient( (IServiceProvider provider) => { ILinkedDocumentsUtilities requiredService7 = provider.GetRequiredService(); IElementIdProvider requiredService8 = provider.GetRequiredService(); return new List { new JsonTableDataExporter(requiredService7, requiredService8) }; } ); serviceCollection.AddTransient( (IServiceProvider _) => new DefaultGlobalStore() ); serviceCollection.AddTransient( (IServiceProvider _) => new DefaultMuidProvider() ); serviceCollection.AddTransient( (IServiceProvider _) => new DefaultConstantsProvider() ); //serviceCollection.AddTransient( // (IServiceProvider provider) => // { // IMuidProvider requiredService9 = provider.GetRequiredService(); // IConstantsProvider requiredService10 = // provider.GetRequiredService(); // IGlobalStore requiredService11 = provider.GetRequiredService(); // return new DefaultAuthProvider( // requiredService10.ProductId, // requiredService9, // requiredService11 // ); // } //); return serviceCollection.BuildServiceProvider(); } private static Extension instance; private static object instanceLock = new object(); } }