DynamoVisualProgramming.ZeroTouchLibrary by Autodesk

<PackageReference Include="DynamoVisualProgramming.ZeroTouchLibrary" Version="0.7.5.1" />

 Application

using Autodesk.DesignScript.Interfaces; using Autodesk.DesignScript.Runtime; using System; using System.Collections.Generic; namespace Autodesk.DesignScript.Geometry { [SupressImportIntoVM] public class Application : IExtensionApplication { private static Application mInstance; private List<IDisposable> mToBeDisposedObjects = new List<IDisposable>(); private IExecutionSession mSession; public IExecutionSession Session => mSession; public static Application Instance { get { if (mInstance == null) mInstance = new Application(); return mInstance; } } public bool IsExecuting => mSession != null; private Application() { mInstance = this; } private void ToBeDisposed(IDisposable obj) { if (obj != null) { lock (mToBeDisposedObjects) { mToBeDisposedObjects.Add(obj); } } } void IExtensionApplication.OnBeginExecution(IExecutionSession session) { mSession = session; if (HostFactory.CurrentInstance != null && !HostFactory.ExtensionApplicationStarted) { foreach (IExtensionApplication extensionApplication in HostFactory.ExtensionApplications) { extensionApplication?.OnBeginExecution(session); } HostFactory.ExtensionApplicationStarted = true; } GeometrySettings.Reset(); GeometrySettings.RootModulePath = session.Configuration.RootModulePath; object configValue = session.Configuration.GetConfigValue(ConfigurationKeys.GeometryXmlProperties); if (configValue != null) GeometrySettings.GeometryXmlProperties = (bool)configValue; configValue = session.Configuration.GetConfigValue(ConfigurationKeys.GeometryFactory); if (configValue != null) GeometrySettings.GeometryFactoryFilePath = (string)configValue; configValue = session.Configuration.GetConfigValue(ConfigurationKeys.PersistentManager); if (configValue != null) GeometrySettings.PersistenceManagerFilePath = (string)configValue; } void IExtensionApplication.OnEndExecution(IExecutionSession session) { if (HostFactory.CurrentInstance != null && HostFactory.ExtensionApplicationStarted) { foreach (IExtensionApplication extensionApplication in HostFactory.ExtensionApplications) { extensionApplication?.OnEndExecution(session); } HostFactory.ExtensionApplicationStarted = false; } if (mSession != null && !object.ReferenceEquals(mSession, session)) throw new InvalidOperationException("Session mismatch for begin and end execution call."); IDisposable[] array = null; lock (mToBeDisposedObjects) { array = mToBeDisposedObjects.ToArray(); mToBeDisposedObjects.Clear(); } IDisposable[] array2 = array; foreach (IDisposable disposable in array2) { disposable.Dispose(); } mSession = null; } public void OnSuspendExecution(IExecutionSession session) { } public void OnResumeExecution(IExecutionSession session) { } public void StartUp() { } public void ShutDown() { } public void PreloadAsmLibraries(string baseDirectory) { } } }