public static void InitWorkspace(List <string> typeDirectories, string workspaceDirectory, string cacheDirectory) { if (typeDirectories == null) { throw new ArgumentNullException("typeDirectories"); } if (typeDirectories.Count == 0) { throw new ArgumentException("List of type directories cannot be empty", "typeDirectories"); } if (cacheDirectory == null) { throw new ArgumentNullException("cacheDirectory"); } if (cacheDirectory.Length == 0) { throw new ArgumentException("m_workspace cache directory must be a valid directory", "cacheDirectory"); } if (s_workspaceInstance != null) { s_workspaceInstance.Dispose(); } StreamManager manager = StreamManager.CreateNewManager(); s_workspaceInstance = InitWorkspaceInternal(typeDirectories, workspaceDirectory, cacheDirectory, manager); }
/// <summary> /// Loads the decision module based on the decision metadata /// </summary> /// <param name="decisionMetadata">The decision metadata.</param> /// <param name="workspaceWrapper">The workspace wrapper.</param> /// <param name="componentsAppDomain">The components app domain is the app domain which decision assembly is going to be loaded into.</param> /// <returns>Loaded decision</returns> internal static ILoopDecisionModule LoadDecisionModule(LoopScopeMetadata loopMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain) { DecisionLoader loader = ConstructDecisionModuleInComponentsAppDomain(loopMetadata, workspaceWrapper, componentsAppDomain); return (ILoopDecisionModule)loader.LoadedDecisionModule; }
/// <summary> /// Creates the scope nested workspace wrapper. /// It is specifc workspace wrapper, that uses the composite node namespace to store and load items. It pass loading and storing to its /// workspace instance, but with added namespace. /// It also has method to setup and teardown workspace units from and to nested workspace. /// </summary> /// <param name="compositeComponentMetadata">The composite component metadata.</param> /// <param name="workspaceInstance">The workspace instance.</param> /// <param name="workspaceNamespaceId">The workspace namespace id.</param> /// <returns></returns> public static ScopeNestedWorkspaceWrapper CreateCompositeComponentWorkspaceWrapper(ScopeBaseMetadata scopeMetadata, IWorkspaceInternal workspaceInstance, string workspaceNamespaceId, AppDomain componentsAppDomain) { var type = typeof(ScopeNestedWorkspaceWrapper); var scopeNestedWorkspaceWrapper = (ScopeNestedWorkspaceWrapper)componentsAppDomain.CreateInstanceAndUnwrap( type.Assembly.FullName, type.FullName, false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null, new object[] { workspaceInstance, workspaceNamespaceId }, System.Globalization.CultureInfo.CurrentCulture, new object[] { }); return scopeNestedWorkspaceWrapper; }
private static DecisionLoader ConstructDecisionModuleInComponentsAppDomain(IDecision decisionMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain) { // DecisionLoader must be MarshalByRef, otherwise the properties don't get filled out the // way that we want them to. DecisionLoader loader = (DecisionLoader)componentsAppDomain.CreateInstanceAndUnwrap( Assembly.GetExecutingAssembly().FullName, typeof(DecisionLoader).FullName, false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null, new object[] { decisionMetadata.Classname, decisionMetadata.SourceAssembly, workspaceWrapper }, System.Globalization.CultureInfo.CurrentCulture, new object[] { }); // Perform the actual load by passing a reference to the Loader's Load function to the new // AppDomain to execute loader.Load(); return loader; }
public static void InitWorkspace(List<string> typeDirectories, string workspaceDirectory, string cacheDirectory) { if (typeDirectories == null) throw new ArgumentNullException("typeDirectories"); if (typeDirectories.Count == 0) throw new ArgumentException("List of type directories cannot be empty", "typeDirectories"); if (cacheDirectory == null) throw new ArgumentNullException("cacheDirectory"); if (cacheDirectory.Length == 0) throw new ArgumentException("m_workspace cache directory must be a valid directory", "cacheDirectory"); if (s_workspaceInstance != null) s_workspaceInstance.Dispose(); StreamManager manager = StreamManager.CreateNewManager(); s_workspaceInstance = InitWorkspaceInternal(typeDirectories, workspaceDirectory, cacheDirectory, manager); }
private static DecisionLoader ConstructDecisionModuleInComponentsAppDomain(IDecision decisionMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain) { // DecisionLoader must be MarshalByRef, otherwise the properties don't get filled out the // way that we want them to. DecisionLoader loader = (DecisionLoader)componentsAppDomain.CreateInstanceAndUnwrap( Assembly.GetExecutingAssembly().FullName, typeof(DecisionLoader).FullName, false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null, new object[] { decisionMetadata.Classname, decisionMetadata.SourceAssembly, workspaceWrapper }, System.Globalization.CultureInfo.CurrentCulture, new object[] { }); // Perform the actual load by passing a reference to the Loader's Load function to the new // AppDomain to execute loader.Load(); return(loader); }
/// <summary> /// Loads the decision module based on the decision metadata /// </summary> /// <param name="decisionMetadata">The decision metadata.</param> /// <param name="workspaceWrapper">The workspace wrapper.</param> /// <param name="componentsAppDomain">The components app domain is the app domain which decision assembly is going to be loaded into.</param> /// <returns>Loaded decision</returns> internal static ILoopDecisionModule LoadDecisionModule(LoopScopeMetadata loopMetadata, IWorkspaceInternal workspaceWrapper, AppDomain componentsAppDomain) { DecisionLoader loader = ConstructDecisionModuleInComponentsAppDomain(loopMetadata, workspaceWrapper, componentsAppDomain); return((ILoopDecisionModule)loader.LoadedDecisionModule); }
/// <summary> /// Initializes a new instance of the <see cref="ComponentLoader"/> class. /// /// Note, that this component loader is constructed in the secondary App Domain via CreateInstanceAndUnwrap. /// (See LoadComponent method in the ComponentsLibrary). /// It is essential that this is done in another App Domain, so that the assembly can be unloaded, after /// experiment execution is completed. /// </summary> /// <param name="metadata">The metadata.</param> /// <param name="workspace">The workspace.</param> public ComponentLoader(ComponentMetadata metadata, IWorkspaceInternal workspace) { m_metadata = metadata; m_workspace = workspace; }
/// <summary> /// Initializes a new s_instance of the <see cref="NodesFactoryOfSubGraph"/> class. /// </summary> /// <param name="compositeComponentMetadata">The composite component metadata, which is going to be used to override config values in subgraph.</param> /// <param name="workspaceWrapper">The workspace wrapper.</param> /// <param name="experimentReverseLookup">The experiment reverse lookup holds information of all predecessor experiments in the path - used to prevent recursion in case subexperiment refers back to any of the previous experiments.</param> public NodesFactoryOfSubGraph(CompositeComponentMetadata compositeComponentMetadata, IWorkspaceInternal workspaceWrapper) : base(workspaceWrapper) //compositeComponentMetadata.SubExperimentFile { m_compositeComponentMetadata = compositeComponentMetadata; }
public ScopeNestedWorkspaceWrapper(IWorkspaceInternal parentWorkspace, string workspaceNamespaceId) : base(parentWorkspace, workspaceNamespaceId) { }
/// <summary> /// Initializes a new instance of the <see cref="WorkspaceWrapper"/> class. /// </summary> /// <param name="iospec">The iospec.</param> /// <param name="workspaceInstance">The workspace instance.</param> public WorkspaceWrapper(IOSpec iospec, IWorkspaceInternal workspaceInstance) { IOSpec = iospec; m_workspace = workspaceInstance; }
/// <summary> /// Creates the workspace wrapper, which ensures that loading and storing of workspace items has been declared by the component. /// </summary> /// <param name="originalComponentMetadata">The component metadata.</param> /// <param name="workspaceInstance">The workspace instance.</param> /// <returns>created workspace wrapper</returns> public static WorkspaceWrapper CreateWorkspaceWrapper(ComponentMetadata componentMetadata, IWorkspaceInternal workspaceInstance) { return new WorkspaceWrapper(componentMetadata.IOSpec, workspaceInstance); }
public RunnableNodeFactory(IWorkspaceInternal workspace) { Workspace = workspace; }
/// <summary> /// Initializes a new instance of the <see cref="NestedWorkspaceWrapper"/> class. /// </summary> /// <param name="parentWorkspace">The parent workspace.</param> /// <param name="workspaceNamespaceId">The workspace namespace id.</param> protected NestedWorkspaceWrapper(IWorkspaceInternal parentWorkspace, string workspaceNamespaceId) { m_parentWorkspace = parentWorkspace; m_workspaceNamespaceId = workspaceNamespaceId; }
/// <summary> /// Initializes a new instance of the <see cref="NestedWorkspaceWrapper"/> class. /// </summary> /// <param name="iospec">The iospec.</param> /// <param name="parentWorkspace">The parent workspace instance or parent workspace wrapper.</param> /// <param name="workspaceNamespaceId">The workspace namespace id.</param> public NestedWorkspaceWrapper(IOSpec iospec, IWorkspaceInternal parentWorkspace, string workspaceNamespaceId) : this(parentWorkspace, workspaceNamespaceId) { IOSpec = iospec; }
/// <summary> /// Creates the workspace wrapper, which ensures that loading and storing of workspace items has been declared by the component. /// </summary> /// <param name="originalComponentMetadata">The component metadata.</param> /// <param name="workspaceInstance">The workspace instance.</param> /// <returns>created workspace wrapper</returns> public static WorkspaceWrapper CreateWorkspaceWrapper(ComponentMetadata componentMetadata, IWorkspaceInternal workspaceInstance) { return(new WorkspaceWrapper(componentMetadata.IOSpec, workspaceInstance)); }
/// <summary> /// Creates the scope nested workspace wrapper. /// It is specifc workspace wrapper, that uses the composite node namespace to store and load items. It pass loading and storing to its /// workspace instance, but with added namespace. /// It also has method to setup and teardown workspace units from and to nested workspace. /// </summary> /// <param name="compositeComponentMetadata">The composite component metadata.</param> /// <param name="workspaceInstance">The workspace instance.</param> /// <param name="workspaceNamespaceId">The workspace namespace id.</param> /// <returns></returns> public static ScopeNestedWorkspaceWrapper CreateCompositeComponentWorkspaceWrapper(ScopeBaseMetadata scopeMetadata, IWorkspaceInternal workspaceInstance, string workspaceNamespaceId, AppDomain componentsAppDomain) { var type = typeof(ScopeNestedWorkspaceWrapper); var scopeNestedWorkspaceWrapper = (ScopeNestedWorkspaceWrapper)componentsAppDomain.CreateInstanceAndUnwrap( type.Assembly.FullName, type.FullName, false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null, new object[] { workspaceInstance, workspaceNamespaceId }, System.Globalization.CultureInfo.CurrentCulture, new object[] { }); return(scopeNestedWorkspaceWrapper); }