SamplesV1/CrossAppDomainDotNetActivitySample/CrossAppDomainDotNetActivity.cs (46 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All Rights Reserved. using Microsoft.Azure.Management.DataFactories.Models; using Microsoft.Azure.Management.DataFactories.Runtime; using System; using System.Collections.Generic; using System.IO; namespace CrossAppDomainDotNetActivitySample { public abstract class CrossAppDomainDotNetActivity<TExecutionContext> : MarshalByRefObject, IActivityLogger, ICrossAppDomainDotNetActivity<TExecutionContext>, IDotNetActivity where TExecutionContext : class { IActivityLogger logger; IDictionary<string, string> IDotNetActivity.Execute(IEnumerable<LinkedService> linkedServices, IEnumerable<Dataset> datasets, Activity activity, IActivityLogger logger) { TExecutionContext context = this.PreExecute(linkedServices, datasets, activity, logger); Type myType = this.GetType(); var assemblyLocation = new FileInfo(myType.Assembly.Location); var appDomainSetup = new AppDomainSetup { ApplicationBase = assemblyLocation.DirectoryName, ConfigurationFile = assemblyLocation.Name + ".config" }; AppDomain appDomain = AppDomain.CreateDomain(myType.ToString(), null, appDomainSetup); var proxy = (ICrossAppDomainDotNetActivity<TExecutionContext>) appDomain.CreateInstanceAndUnwrap(myType.Assembly.FullName, myType.FullName); this.logger = logger; return proxy.Execute(context, (IActivityLogger)this); } public abstract IDictionary<string, string> Execute(TExecutionContext context, IActivityLogger logger); public override object InitializeLifetimeService() { // Ensure that the client-activated object lives as long as the hosting app domain. return null; } protected virtual TExecutionContext PreExecute(IEnumerable<LinkedService> linkedServices, IEnumerable<Dataset> datasets, Activity activity, IActivityLogger logger) { return null; } void IActivityLogger.Write(string format, params object[] args) { this.logger.Write(format, args); } } }