Loads components on an isolated AppDomain.
Inheritance: System.MarshalByRefObject, IDisposable
示例#1
0
		/// <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);
		}
示例#2
0
		/// <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));
		}
示例#3
0
		/// <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>
		///	  &lt;component id="componentid.*"&gt;
		///     &lt;providesService service="Company.Project.IService, Company.Project" /&gt;
		///   &lt;/component&gt;
		/// </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());
		}
示例#4
0
		/// <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);
				}
			}
		}