public Job CreateJob(double timeIn, JobArrivalType arrivalTypeIn) { int batchSize = 0; double dueDate = 0; JobManager manager = ((JobManager)((JobMix)this.Parent).Parent); if (arrivalTypeIn == JobArrivalType.TraceBased) { batchSize = manager.BatchList[0]; manager.BatchList.RemoveAt(0); dueDate = manager.GenerateDueDate(this); } else { batchSize = (int)this.batch.GenerateValue(); dueDate = manager.GenerateDueDate(this); } Statistics submitted = this.Statistics["Submitted"]; submitted.UpdateCount(timeIn, +1); Job job = new Job(String.Format("{0}{1} ({2})", this.Name, submitted.Count, Guid.NewGuid()), this.Parent, timeIn, batchSize, dueDate, this); this.jobs.Add(job); return(job); }
public static IJobGenerator GetJobGenerator(JobArrivalType arrivalType) { // get the type of the interface var type = typeof(IJobGenerator); // query all the classes that implement IMyInterface in current assembly // startTime.IsClass is very important, otherwise you will get more interface types // that inherited IMyInterface, include IMyInterface itself var q = from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsClass && type.IsAssignableFrom(t) select t; // convert the query result to list (List<type>) var classes = q.ToList(); // find the one we need // var myClass = classes.FirstOrDefault(c => c.Name.ToLower().Contains(arrivalType.ToString().ToLower())); var myClass = classes.FirstOrDefault(c => c.Name.Equals(arrivalType + "JobGenerator")); // create an instance from a type var instance = (IJobGenerator)Activator.CreateInstance(myClass); // return the created instance return instance; }