/// <summary> /// Constructor /// </summary> /// <param name="Compiler">The compiler.</param> /// <param name="Aspects">The aspects.</param> /// <param name="Modules">The modules.</param> public Manager(Compiler Compiler, IEnumerable <IAspect> Aspects, IEnumerable <IAOPModule> Modules) { Contract.Requires <ArgumentNullException>(Compiler != null, "Compiler"); Contract.Requires <ArgumentNullException>(Compiler.Classes != null, "Compiler.Classes"); Contract.Requires <ArgumentNullException>(Aspects != null, "Aspects"); Contract.Requires <ArgumentNullException>(Modules != null, "Modules"); Manager.Compiler = Compiler; if (Manager.Aspects.Count == 0) { Manager.Aspects.Add(Aspects); } Compiler.Classes.ForEachParallel(x => Classes.AddOrUpdate(x.BaseType, y => x, (y, z) => x)); Modules.ForEachParallel(x => x.Setup(this)); }