Exemple #1
0
        /// <summary>
        /// 加载应用程序,获取作业实例
        /// </summary>
        /// <param name="assemblyPath">作业实例程序集的物理路径</param>
        /// <param name="classType">作业实例的完全限定名</param>
        /// <param name="appDomain"></param>
        /// <returns></returns>
        public static BaseJob.BaseJob Load(string assemblyPath, string classType, out AppDomain appDomain)
        {
            AppDomainSetup setup = new AppDomainSetup();

            if (System.IO.File.Exists($"{assemblyPath}.config"))
            {
                setup.ConfigurationFile = $"{assemblyPath}.config";
            }
            setup.ShadowCopyFiles = "true";
            setup.ApplicationBase = System.IO.Path.GetDirectoryName(assemblyPath);
            string appDomainName = System.IO.Path.GetFileName(assemblyPath);

            if (string.IsNullOrWhiteSpace(appDomainName))
            {
                throw new ArgumentNullException($"应用程序域名称为空,assemblyPath : {assemblyPath}");
            }
            appDomain = AppDomain.CreateDomain(appDomainName, null, setup);
            AppDomain.MonitoringIsEnabled = true;
            BaseJob.BaseJob obj = (BaseJob.BaseJob)appDomain.CreateInstanceFromAndUnwrap(assemblyPath, classType);
            return(obj);
        }
Exemple #2
0
 /// <summary>
 /// 创建新的应用程序域,返回运行时的Job数据
 /// </summary>
 /// <param name="jobInfo"></param>
 internal JobRuntimeInfo CreateJobRuntimeInfo(JobInfo jobInfo)
 {
     lock (Locker)
     {
         //JobRuntimeInfo jobRuntimeInfo = null;
         //if (JobPool.ContainsKey(jobInfo.Id))
         //{
         //    jobRuntimeInfo = GetJobFromPool(jobInfo.Id);
         //    return jobRuntimeInfo;
         //}
         AppDomain       app            = Thread.GetDomain();
         BaseJob.BaseJob job            = AppDomainLoader.Load(jobInfo.AssemblyPath, jobInfo.ClassType, out app);
         JobRuntimeInfo  jobRuntimeInfo = new JobRuntimeInfo
         {
             JobInfo   = jobInfo,
             Job       = job,
             AppDomain = app,
         };
         //TODO:日志记录
         return(jobRuntimeInfo);
     }
 }