/// <summary> /// Register a new loader, for the specified <paramref name="domainId"/>. /// </summary> public void RegisterLoader(string domainId, RemoteLoader loader) { if (loaders == null) throw new ObjectDisposedException("DynamicLoaderRegistry"); loaders.Add(domainId, loader); }
/// <summary> /// Creates a new <see cref="DynamicLoaderActivator"/>. /// </summary> public DynamicLoaderActivator(ComponentModel model, IKernel kernel, ComponentInstanceDelegate onCreation, ComponentInstanceDelegate onDestruction) : base(model, kernel, onCreation, onDestruction) { if (!model.Implementation.IsSubclassOf(typeof(MarshalByRefObject))) throw new FacilityException( String.Format( "The implementation for the component '{0}' must inherit from System.MarshalByRefObject in order to be created in an isolated AppDomain.", model.Name)); this.loader = (RemoteLoader) model.ExtendedProperties["dynamicLoader.loader"]; if (this.loader == null) throw new FacilityException(String.Format("A remote loader was not created for component '{0}'.", model.Name)); }
/// <summary> /// Register each batch component. /// </summary> /// <param name="loader">The <see cref="RemoteLoader"/> instance in which to register</param> /// <param name="componentsNode">The component configuration node</param> /// <remarks> /// <example> /// An example of a valid configuration node: /// <code> /// <component id="componentid.*"> /// <providesService service="Company.Project.IService, Company.Project" /> /// </component> /// </code> /// </example> /// </remarks> private void InitializeBatchComponents(RemoteLoader loader, IConfiguration componentsNode) { if (componentsNode == null) return; string componentIdMask = componentsNode.Attributes["id"]; List<Type> servicesProvided = new List<Type>(); foreach(IConfiguration cond in componentsNode.Children) { switch(cond.Name) { case "providesService": servicesProvided.Add(Type.GetType(cond.Attributes["service"])); break; default: throw new FacilityException("Unrecognized configuration node: " + cond.Name); } } loader.RegisterByServiceProvided(componentIdMask, servicesProvided.ToArray()); }
/// <summary> /// Initializes the batch registration. /// </summary> /// <param name="loader">The loader.</param> /// <param name="batchRegistrationNode">The batch registration node.</param> protected virtual void InitializeBatchRegistration(RemoteLoader loader, IConfiguration batchRegistrationNode) { if (batchRegistrationNode == null) return; foreach(IConfiguration comp in batchRegistrationNode.Children) { switch(comp.Name) { case "components": InitializeBatchComponents(loader, comp); break; default: throw new FacilityException("Unrecognized configuration node: " + comp.Name); } } }