using Autodesk.Revit.DB; using Autofac; using Speckle.Autofac; using Speckle.Autofac.DependencyInjection; using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; using Speckle.Connectors.Revit.Bindings; using Speckle.Connectors.Revit.HostApp; using Speckle.Connectors.Revit.Operations.Receive; using Speckle.Connectors.Revit.Operations.Send; using Speckle.Connectors.Revit.Plugin; using Speckle.Connectors.Utils; using Speckle.Connectors.Utils.Builders; using Speckle.Connectors.Utils.Caching; using Speckle.Connectors.Utils.Operations; using Speckle.Sdk.Models.GraphTraversal; #if REVIT2025 using Speckle.Connectors.DUI.WebView; #else using CefSharp; #endif namespace Speckle.Connectors.Revit.DependencyInjection; // POC: should interface out things that are not public class RevitConnectorModule : ISpeckleModule { public void Load(SpeckleContainerBuilder builder) { builder.AddAutofac(); builder.AddConnectorUtils(); builder.AddDUI(); RegisterUiDependencies(builder); builder.AddSingletonInstance(); // register builder.AddSingleton(); // Storage Schema builder.AddScoped(); builder.AddScoped(); // POC: we need to review the scopes and create a document on what the policy is // and where the UoW should be // register UI bindings builder.AddSingleton(); builder.AddSingleton("connectorName", "Revit"); // POC: Easier like this for now, should be cleaned up later builder.AddSingleton(); builder.AddSingleton(); builder.AddSingleton(); // builder.AddSingleton(); // TODO: Have it back once we comfortable enough! builder.AddSingleton(); builder.ContainerBuilder.RegisterType().As().AsSelf().SingleInstance(); builder.AddSingleton(c => c.Resolve().Parent.TopLevelExceptionHandler ); builder .ContainerBuilder.RegisterType() .As() .As() .SingleInstance(); // send operation and dependencies builder.AddScoped>(); builder.AddScoped(); builder.AddScoped(); builder.AddScoped, RevitRootObjectBuilder>(); builder.AddSingleton(); // receive operation and dependencies builder.AddScoped(); builder.AddScoped(); builder.AddSingleton(DefaultTraversal.CreateTraversalFunc()); // operation progress manager builder.AddSingleton(); } public void RegisterUiDependencies(SpeckleContainerBuilder builder) { // if revit 2025 or higher, register webview2 dependencies // else register cefSharp depenedencies #if REVIT2025 builder.AddDUIView(); builder.AddSingleton(); builder.AddSingleton(); builder.AddSingleton(); #elif REVIT2022 //different versons for different versions of CEF builder.AddSingleton(new BindingOptions() { CamelCaseJavascriptNames = false }); builder.AddSingleton(); builder.AddSingleton(c => c.Resolve()); builder.AddSingleton(); #else // POC: different versons for different versions of CEF builder.AddSingleton(BindingOptions.DefaultBinder); var panel = new CefSharpPanel(); panel.Browser.JavascriptObjectRepository.NameConverter = null; builder.AddSingleton(panel); builder.AddSingleton(c => c.Resolve()); builder.AddSingleton(); #endif } }